【问题标题】:C++ Semantics of calling reset on a unique pointer in a destructor在析构函数中的唯一指针上调用重置的 C++ 语义
【发布时间】:2021-02-15 21:35:25
【问题描述】:

假设我们在 hpp 文件中有一个带有唯一指针的简单结构:

struct SomeType
{
    SomeType() = default;
    ~SomeType();
    
    std::unique_ptr<int> ptr;
};

在 cpp 中我们有:

SomeType::~SomeType()
{
    ptr.reset();
}

这个析构函数在某种程度上有用还是只是多余的? 是否有可能对内存/堆造成双重删除或其他不必要的副作用?

【问题讨论】:

  • 带有唯一ptr的多余
  • 在某些情况下,您可能需要在析构函数中运行某些代码或释放其他成员之前释放 ptr,但通常这是多余的。

标签: c++ destructor heap-memory unique-ptr


【解决方案1】:

如果这是析构函数中唯一没有必要的代码行,那么无论哪种方式都会发生。所有成员的析构函数都会在父析构函数之后自动调用。

如果您在析构函数中还有其他事情要做和/或操作的确切顺序很重要,这可能会很有用。

不会发生双重删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    相关资源
    最近更新 更多