在析构函数中对唯一指针调用重置的 C++ 语义
C++ Semantics of calling reset on a unique pointer in a destructor
假设我们在 hpp 文件中有一个带有唯一指针的简单结构:
struct SomeType
{
SomeType() = default;
~SomeType();
std::unique_ptr<int> ptr;
};
在 cpp 中我们有:
SomeType::~SomeType()
{
ptr.reset();
}
这个析构函数是有用还是多余?
memory/heap 是否有可能出现双重删除或其他不需要的副作用?
如果这是析构函数中唯一没有必要的代码行,它会以任何一种方式发生。所有成员析构函数在父析构函数之后自动调用。
如果您在析构函数中还有一些其他事情要做,这可能会有用and/or操作的确切顺序很重要。
不会出现双删
假设我们在 hpp 文件中有一个带有唯一指针的简单结构:
struct SomeType
{
SomeType() = default;
~SomeType();
std::unique_ptr<int> ptr;
};
在 cpp 中我们有:
SomeType::~SomeType()
{
ptr.reset();
}
这个析构函数是有用还是多余? memory/heap 是否有可能出现双重删除或其他不需要的副作用?
如果这是析构函数中唯一没有必要的代码行,它会以任何一种方式发生。所有成员析构函数在父析构函数之后自动调用。
如果您在析构函数中还有一些其他事情要做,这可能会有用and/or操作的确切顺序很重要。
不会出现双删