所以我们有(伪代码):
class A
{
A(shared_ptr parent){}
}
class B
{
A *a;
B()
{
a = new A(boost::shared_ptr(this));
}
}
是否可以在C ++中使用shared_ptr进行此类操作以及如何在真正的C ++代码中执行此操作?
答案 0 :(得分:6)
您需要enable_shared_from_this
:
#include <memory>
class B : public std::enable_shared_from_this<B>
{
A * a;
public:
B() : a(new A(std::shared_from_this())) { }
};
(这是针对C ++ 0x; Boost应该类似。)
只是从this
制作一个共享指针很棘手,因为你可能会自己动手。继承enable_shared_from_this
会使这更容易。
警告:您使用裸A
指针进行构造似乎无法使用资源管理类。为什么不将a
变成智能指针呢?也许是unique_ptr
?