我想知道以下代码在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(); }
};
答案 0 :(得分:7)
不,发布的代码既无用也不安全。
存在三种情况,但都没有一个积极的结果:
在这种情况下,对象超出范围将被销毁。它的析构函数将运行并尝试释放它不拥有的内存,从而导致未定义的行为。
Example
delete
获得在这种情况下,当调用者(或由调用者创建的某些智能指针)delete
成为对象时,将调用析构函数。然后,您的析构函数将尝试再次delete
该对象,从而导致未定义的行为。
Example
delete
得到它在这种情况下,该对象将永远不会被销毁。它的析构函数将永远不会被调用,并且其存储将被泄漏。您额外的shared_ptr
成员一无所获。
Example