创建一个引用自身的类的智能指针成员是一个优雅的c ++设计模式?

art*_*ias 1 c++ design-patterns smart-pointers

我想知道以下代码是否是C++中的一个好模式?

完全没有问题.代码有效.但我想知道这是否会导致某种问题.

#include <iostream>
#include <memory>

template <typename T>
class Class {
    public:
        std::shared_ptr<Class> shared_ptr;

        Class() : shared_ptr(this) {}
        ~Class() { shared_ptr.reset(); }
};
Run Code Online (Sandbox Code Playgroud)

Mil*_*nek 7

不,发布的代码既无用也无安全.

有三种情况,没有一种情况有积极的结果:

  1. 该对象在自动存储中创建

在这种情况下,对象将在超出范围时被销毁.它将运行析构函数并尝试释放它不拥有的内存,从而导致未定义的行为.

  1. 该对象在动态存储中创建,delete并由调用者获取

在这种情况下,当调用者(或调用者创建的一些智能指针)delete是对象时,将调用析构函数.然后,析构函数将再次尝试delete该对象,从而导致未定义的行为.

  1. 该对象在动态存储中创建,并且不会delete被调用者获取

在这种情况下,对象永远不会被销毁.它的析构函数永远不会被调用,它的存储将被泄露.你的额外shared_ptr成员什么都没有.