大挪耗

c++智能指针shareed_ptr

#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)。


已发布

分类

可以收藏大挪耗一下。下载麻烦点城通网盘,站长保证下载速度,不会限速的,放心点就是了;分卷,安卓下载为txt:程序下载为url,不会下载参考不会下载。如果你想让本站活的久一点,请直接捐助

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注