【发布时间】:2013-06-24 02:05:23
【问题描述】:
是否可以使用 decltype 和\或 std::remove_reference 调用析构函数(不带操作符删除)?这是一个例子:
#include <iostream>
#include <type_traits>
using namespace std;
class Test
{
public:
Test() {}
virtual ~Test() {}
};
int main()
{
Test *ptr;
ptr->~Test(); // works
ptr->~decltype(*ptr)(); // doesn't work
ptr->~std::remove_reference<decltype(*ptr)>::type(); // doesn't work
return 0;
}
【问题讨论】:
-
不,不可能。
-
析构函数不是类型。
-
... 但您可以使用函数模板显式调用 dtor(推断类型)。不过,不确定你会得到什么。
-
DyP,模板是一种可能的解决方案。谢谢!
标签: c++ c++11 std destructor decltype