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)
不,发布的代码既无用也无安全.
有三种情况,没有一种情况有积极的结果:
在这种情况下,对象将在超出范围时被销毁.它将运行析构函数并尝试释放它不拥有的内存,从而导致未定义的行为.
例
delete并由调用者获取在这种情况下,当调用者(或调用者创建的一些智能指针)delete是对象时,将调用析构函数.然后,析构函数将再次尝试delete该对象,从而导致未定义的行为.
例
delete被调用者获取在这种情况下,对象永远不会被销毁.它的析构函数永远不会被调用,它的存储将被泄露.你的额外shared_ptr成员什么都没有.
例