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

发表回复