0
点赞
收藏
分享

微信扫一扫

C++(11):智能指针shared_ptr

雷亚荣 2022-04-30 阅读 86
c++

shared_ptr是通过引用计数维护内存的所有权,因此可以多个智能指针共享同一块内存:

#include <memory>
using namespace std;

class A{
public:
	A(int d):m_data(d)
	{
		cout<<"Construct A to:"<<m_data<<" this addr:"<<this<<endl;
	}
	~A()
	{
		cout<<"Destruct A, this addr:"<<this<<endl;
	}
	int m_data;
};

ostream& operator<<(ostream& os, const A &a)
{
	os<<a.m_data<<" addr:"<<&a;
	return os;
}

int main(){

	shared_ptr<A> up1(new A(1));        //调用构造函数,构造匿名对象,记作a,输出:Construct A to:1 this addr:0x6d6f90
	cout<<"pos1 m_data:"<<*up1<<endl;   //访问up1指向的对象a,输出:pos1 m_data:1 addr:0x6d6f90
	shared_ptr<A> up2 = up1;            //up2与up1共享同对内存对象a的访问
	cout<<"pos2 m_data:"<<*up2<<endl;   //输出:pos2 m_data:1 addr:0x6d6f90
	up1.reset();                        //up1释放对a的访问权,降低引用计数,由于此时up2还拥有对内存对象a的访问权,因此不会释放对象a
	cout<<"pos3 m_data:"<<*up2<<endl;   //输出:pos3 m_data:1 addr:0x6d6f90
	up2.reset();                        //up2释放对a的访问权,降低引用计数,由于此时引用计数为0,释放内存,调用析构函数,输出:Destruct A, this addr:0x6d6f90
	return 0;
}
举报

相关推荐

0 条评论