shared_ptr是通过引用计数维护内存的所有权,因此可以多个智能指针共享同一块内存:
#include <iostream>
#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> sp1(new A(1)); //调用构造函数,构造匿名对象,记作a,输出:Construct A to:1 this addr:0x6d6f90
cout<<"pos1 m_data:"<<*sp1<<endl; //访问sp1指向的对象a,输出:pos1 m_data:1 addr:0x6d6f90
shared_ptr<A> sp2 = sp1; //sp2与sp1共享同对内存对象a的访问
cou