gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:12 25 4
gpt4 key购买 nike

我想知道以下代码在 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(); }
};

最佳答案

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

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

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

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

  1. 对象在动态存储中创建并获得delete d 由来电者

在这种情况下,析构函数将在调用者(或调用者创建的某个智能指针)delete 时被调用。是对象。然后你的析构函数将尝试 delete对象,导致未定义的行为。
Example

  1. 对象是在动态存储中创建的,没有得到 delete d 由来电者

在这种情况下,对象永远不会被销毁。它的析构函数永远不会被调用,它的存储空间也会被泄露。你的额外shared_ptr成员一事无成。
Example

关于c++ - 创建引用自身的类的智能指针成员是 C++ 中优雅的设计模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54467794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com