可以通过weak_from_this在对象的内部返回指向自己的weak_ptr:
#include <memory>
#include <iostream>
using namespace std;
class A : public ::enable_shared_from_this<A>
{
public:
~A()
{
cout << "Destruct A" <<endl;
}
weak_ptr<A> getWeak()
{
return weak_from_this();
}
};
int main()
{
shared_ptr<A> sp1(new A());
cout << "sp1.use_count() = " << sp1.use_count() << endl;
shared_ptr<A> sp2 = sp1->getWeak().lock();
if(sp2 != nullptr)
{
cout << "sp2.use_count() = " << sp2.use_count() << endl;
}
return 0;
}
运行程序输出:
sp1.use_count() = 1
sp2.use_count() = 2
Destruct A