使用私有析构函数销毁对象

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, ... */ }

Demo