建站快车,江苏建设工程,南京哪公司建设网站,怎么看一个网站是html5返回管理this的shared_ptr
通过wek_ptr返回管理this资源的共享智能指针对象shared_ptr。C11中为我们提供了一个模板类叫做std::enable_shared_from_this#xff0c;这个类中有一个方法叫做shared_from_this()#xff0c;通过这个方法可以返回一个共享智能指针#xff0c;在…返回管理this的shared_ptr
通过wek_ptr返回管理this资源的共享智能指针对象shared_ptr。C11中为我们提供了一个模板类叫做std::enable_shared_from_this这个类中有一个方法叫做shared_from_this()通过这个方法可以返回一个共享智能指针在函数的内部就是使用weak_ptr来监测this对象并通过调用weak_ptr的lock()方法返回一个shared_ptr对象。
#include iostream
#include memory
using namespace std;struct Test : public enable_shared_from_thisTest
{shared_ptrTest getSharedPtr(){return shared_from_this();}~Test(){cout class Test is disstruct ... endl;}
};int main()
{shared_ptrTest sp1(new Test);cout use_count: sp1.use_count() endl;shared_ptrTest sp2 sp1-getSharedPtr();cout use_count: sp1.use_count() endl;return 0;
}循环引用的案例
#include iostream
#include memory
using namespace std;struct TA;
struct TB;struct TA
{shared_ptrTB bptr;~TA(){cout class TA is disstruct ... endl;}
};struct TB
{shared_ptrTA aptr;~TB(){cout class TB is disstruct ... endl;}
};void testPtr()
{shared_ptrTA ap(new TA);shared_ptrTB bp(new TB);cout TA object use_count: ap.use_count() endl;cout TB object use_count: bp.use_count() endl;ap-bptr bp;bp-aptr ap;cout TA object use_count: ap.use_count() endl;cout TB object use_count: bp.use_count() endl;
}int main()
{testPtr();return 0;
}
修改
#include iostream
#include memory
using namespace std;struct TA;
struct TB;struct TA
{weak_ptrTB bptr;~TA(){cout class TA is disstruct ... endl;}
};struct TB
{shared_ptrTA aptr;~TB(){cout class TB is disstruct ... endl;}
};void testPtr()
{shared_ptrTA ap(new TA);shared_ptrTB bp(new TB);cout TA object use_count: ap.use_count() endl;cout TB object use_count: bp.use_count() endl;ap-bptr bp;bp-aptr ap;cout TA object use_count: ap.use_count() endl;cout TB object use_count: bp.use_count() endl;
}int main()
{testPtr();return 0;
}