#include "iostream"
#include "memory"
using namespace std;
class AA
{
public:
string m_name;
AA(){cout<<m_name<<"调用构造函数AA()。\n";}
AA(const string &name):m_name(name){cout<<"调用构造函数AA("<<m_name<<".\n";}
~AA(){cout<<"调用了析构函数~AA("<<m_name<<")。\n";}
};
int main() {
// AA*p=new AA("西施");
// shared_ptr <AA>p0(p);//用已存在的地址初始化。
//
// shared_ptr <AA>p1=p0;//用已存在的shared_ptr拷贝构造,计数加1。
// shared_ptr <AA>p2=p0;//用已存在的shared_ptr拷贝构造,计数加1。
//
// cout<<"p0.use_count()="<<p0.use_count()<<endl;//显示p0引用计数的值
// cout<<"m_name"<<p0->m_name<<endl;
// cout<<"p0.get()="<<p0.get()<<endl;
//
// cout<<"p1.use_count()="<<p1.use_count()<<endl;
// cout<<"m_name"<<p1->m_name<<endl;
// cout<<"p1.get()"<<p1.get()<<endl;
//
// cout<<"p2.use_count()="<<p2.use_count()<<endl;
// cout<<"m_name"<<p2->m_name<<endl;
// cout<<"p2.get()"<<p2.get()<<endl;
///--------------------------------------------
shared_ptr<AA> pa0(new AA("西施a"));//初始化资源西施a
shared_ptr<AA> pa1 = pa0;//用已存在的share_ptr拷贝构造,计数加1。
shared_ptr<AA> pa2 = pa0;//用已存在的share_ptr拷贝构造,计数加1。
cout << "pb0.use_count()=" << pa0.use_count() << endl;//值为3。
shared_ptr<AA>pb0(new AA("西施b"));//初始化资源西施b.
shared_ptr<AA>pb1=pb0;//用已存在的shared_ptr拷贝构造,计数加1.
cout<<"pb0.use_count()="<<pb0.use_count()<<endl;//值为2
pb1=pa1;//资源西施a的引用加1,资源西施b的引用减1。
cout<<"pa0.use_count()="<<pa0.use_count()<<endl;//值为4。
cout<<"pb0.use_count()="<<pb0.use_count()<<endl;//值为1。
pb0=pa1;//资源西施a的引用加1,资源西施b的引用成了0,将被释放。
cout<<"pa0.use_count()="<<pa0.use_count()<<endl;//值为5。
cout<<"pb0.use_count()="<<pb0.use_count()<<endl;//值为5。
}
调用构造函数AA(西施a.
pb0.use_count()=3
调用构造函数AA(西施b.
pb0.use_count()=2
pa0.use_count()=4
pb0.use_count()=1
调用了析构函数~AA(西施b)。
pa0.use_count()=5
pb0.use_count()=5
调用了析构函数~AA(西施a)。
发表回复