C++如何正确使用智能指针?看完这4个点你就明白了( 十 )

如果我们使用a.widget = std::make_shared<Widget>(this); , 肯定也不行 , 因为这个新创建的 shared_ptr , 跟当前对象的 shared_ptr 毫无关系 。 当前对象的 shared_ptr 生命周期结束后 , 依然会释放掉当前内存 , 那么之后a.widget依然是不合法的 。

对于这种 , 需要在对象内部获取该对象自身的 shared_ptr 那么该类必须继承std::enable_shared_from_this<T> 。 代码如下:

class Widget : public std::enable_shared_from_this<Widget>
{
public:
void do_something(A& a)
{
a.widget = shared_from_this();


这样才是合法的做法 。

推荐阅读