如何获取析构函数的成员函数指针?

bit*_*ask 4 c++ destructor member-function-pointers c++03

假设我有

struct X {
  ~X() {}
};
Run Code Online (Sandbox Code Playgroud)

X::~X()在C++ 03中获取成员函数指针的类型是什么?

我不想实际调用它,只是在SFINAE中使用来确定是否存在给定类型的析构函数.

K-b*_*llo 5

您无法获取析构函数的函数指针或构造函数.尽管如此,类型仍然存在析构函数,并且您无法检测SFINAEprivate是否考虑使用析构函数作为访问说明符.

关于调用标量类型的析构函数的问题,标准说[class.dtor]/16:

[注意:显式调用析构函数的表示法可用于任何标量类型名称(5.2.4).允许这样就可以编写代码而无需知道给定类型是否存在析构函数.例如,

typedef int I;

我*p;

P->我::〜I();

- 尾注]

  • @bitmask:你确实认为性能成本是破坏性的吗?你是怎么得出这个结论的?如果析构函数是微不足道的,编译器将看到一个空循环,并且最有可能将其优化掉.Milage会有所不同,但您可以查看生成的代码并查看是否已从函数中删除循环. (2认同)