Ole*_*siy 3 c++ destructor scope
是否有任何可能的情况,使用标准new/ delete是不够的,我们需要显式调用析构函数,如pA->~A()?
我认为这在某些资源管理课程中是必要的,但通常是个坏主意.析构函数在作用域结束时自动调用,为什么我要自己显式调用它?
一个例子的解释会很棒!
在C++ 11中,您可以union使用需要析构函数的类型.由于编译器不跟踪当前活动的类型,因此在替换当前活动成员或销毁时,您需要显式销毁当前成员union.
在9.5 [class.union]第4段中,该标准使用以下示例代码从当前活动成员切换m到新活动成员n:
u.m.~M();
new (&u.n) N;
Run Code Online (Sandbox Code Playgroud)
使用显式析构函数调用的另一个实例是使用放置手动构造的对象new.
假设您正在尝试使用malloc/ free-compatible API(例如,与允许指定自定义C样式分配器的C客户端进行交互):
void* buf = malloc(sizeof (MyType));
if (buf) {
MyType* foo = new (buf) MyType;
// ...
foo->~MyType();
free(buf);
}
Run Code Online (Sandbox Code Playgroud)
(虽然,在这种情况下,最好只使用一个shared_ptr或unique_ptr自定义删除器.)