使用私有析构函数销毁对象
Destructing objects with private destructors
我目前正在开发一个生成 C++ 代码的程序。这个生成的C++代码有时需要析构一个Class,所以它使用
ptr->~MyClass();
,因为这适用于所有极端情况(包括例如继承的析构函数)。或者我想:如果有一个私有析构函数:
class MyClass {
~MyClass();
};
那么ptr->~MyClass();
会出现编译时错误
有什么想法吗?如果析构函数是私有的,生成的代码要么调用它,要么抛出异常,要么退出程序。
请注意,我的代码生成器不知道哪个 class 有私有析构函数,哪个 class 没有私有析构函数。
您最好不要显式调用析构函数!当对象超出范围时自动调用它。
您可以使用 SFINAE:
template <typename T>
auto destruct(T* t) -> decltype(t->~T()) { t->~T(); }
auto destruct(void*) { /* throw, exit, ... */ }
我目前正在开发一个生成 C++ 代码的程序。这个生成的C++代码有时需要析构一个Class,所以它使用
ptr->~MyClass();
,因为这适用于所有极端情况(包括例如继承的析构函数)。或者我想:如果有一个私有析构函数:
class MyClass {
~MyClass();
};
那么ptr->~MyClass();
会出现编译时错误
有什么想法吗?如果析构函数是私有的,生成的代码要么调用它,要么抛出异常,要么退出程序。
请注意,我的代码生成器不知道哪个 class 有私有析构函数,哪个 class 没有私有析构函数。
您最好不要显式调用析构函数!当对象超出范围时自动调用它。
您可以使用 SFINAE:
template <typename T>
auto destruct(T* t) -> decltype(t->~T()) { t->~T(); }
auto destruct(void*) { /* throw, exit, ... */ }