大挪耗

c++智能指针weak_ptr

#include "iostream"
#include "memory"

using namespace::std;

class BB;

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";}
  weak_ptr<AA> m_p;
};

class BB
{
public:
    string m_name;
    BB(){cout<<m_name<<"调用构造函数BB()。\n";}
    BB(const string&name):m_name(name){cout<<"调用构造函数BB("<<m_name<<")。\n";}
    ~BB(){cout<<"调用了析构函数~BB("<<m_name<<")。\n";}
    weak_ptr<BB> m_p;
};

int main(){
    
    shared_ptr<AA> pa=make_shared<AA>("西施a");
    shared_ptr<AA> pb=make_shared<AA>("西施b");

    cout<<"pa.use_conut()="<<pa.use_count()<<endl;
    cout<<"pb.use_conut()="<<pb.use_count()<<endl;

    pa->m_p=pb;
    pb->m_p=pa;

    cout<<"pa.use_conut()="<<pa.use_count()<<endl;
    cout<<"pb.use_conut()="<<pb.use_count()<<endl;
}

调用构造函数AA(西施a)。
调用构造函数AA(西施b)。
pa.use_conut()=1
pb.use_conut()=1
pa.use_conut()=1
pb.use_conut()=1
调用了析构函数~AA(西施b)。
调用了析构函数~AA(西施a)。

#include "iostream"
#include "memory"

using namespace::std;

class BB;

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";}
  weak_ptr<BB> m_p;
};

class BB
{
public:
    string m_name;
    BB(){cout<<m_name<<"调用构造函数BB()。\n";}
    BB(const string&name):m_name(name){cout<<"调用构造函数BB("<<m_name<<")。\n";}
    ~BB(){cout<<"调用了析构函数~BB("<<m_name<<")。\n";}
    weak_ptr<AA> m_p;
};

int main(){
//
//    shared_ptr<AA> pa=make_shared<AA>("西施a");
//    shared_ptr<BB> pb=make_shared<BB>("西施b");
//
//    cout<<"pa.use_conut()="<<pa.use_count()<<endl;
//    cout<<"pb.use_conut()="<<pb.use_count()<<endl;
//
//    pa->m_p=pb;
//    pb->m_p=pa;
//
//    cout<<"pa.use_conut()="<<pa.use_count()<<endl;
//    cout<<"pb.use_conut()="<<pb.use_count()<<endl;

    shared_ptr<AA> pa=make_shared<AA>("西施a");
    {
        shared_ptr<BB> pb=make_shared<BB>("西施b");

        pa->m_p = pb;
        pb->m_p = pa;

        shared_ptr <BB>pp=pa->m_p.lock();//把weak_ptr提升为shared_ptr。

        if(pp== nullptr)
            cout<<"语句块内部: pa->m_p已过期。\n";
        else
            cout<<"语句块内部:pa->m_name"<<pa->m_p.lock()->m_name<<endl;

    }
    shared_ptr <BB>pp=pa->m_p.lock();//把weak_ptr提升为shared_ptr。

    if(pp== nullptr)
        cout<<"语句块内部: pa->m_p已过期。\n";
    else
        cout<<"语句块内部:pa->m_name"<<pa->m_p.lock()->m_name<<endl;


}

调用构造函数AA(西施a)。
调用构造函数BB(西施b)。
语句块内部:pa–>m_name西施b
调用了析构函数~BB(西施b)。
语句块内部: pa->m_p已过期。
调用了析构函数~AA(西施a)。


已发布

分类

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

发表回复

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