#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)。
发表回复