假设我们在hpp文件中有一个带有唯一指针的简单结构:
struct SomeType
{
SomeType() = default;
~SomeType();
std::unique_ptr<int> ptr;
};
在cpp中,我们有:
SomeType::~SomeType()
{
ptr.reset();
}
这个析构函数是有用的还是多余的?内存/堆是否有可能出现双重删除或其他不必要的副作用?
如果这是析构函数中唯一不必要的代码行,那么这两种情况都会发生。所有成员的析构函数都是在父析构函数之后自动调用的。
如果你在析构函数中还有其他事情要做,那么它可能会很有用,并且/或者操作的确切顺序很重要。
不会发生双重删除。