2012-06-02 46 views
4

假设我有如何获取析构函数的成员函数指针?

struct X { 
    ~X() {} 
}; 

什么类型,我如何获得C++ 03的X::~X()成员函数指针?

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

+3

析构函数** **总是存在... –

+0

@OliCharlesworth:但是,作为一个实际的功能?当我从栈中弹出一个'int'时,没有调用int ::〜int'函数。 – bitmask

+0

@bitmask:'int'不是'class',所以它没有_destructor_。 –

回答

5

你不能得到析构函数的指针或构造函数。尽管如此,对于某个类型总是存在析构函数,并且您无法检测到带有as访问说明符的private是否不被SFINAE所考虑。

上调用这将是一个标量类型的析构函数的主体,标准说[class.dtor]/16

[注:符号的析构函数的显式调用可以用于任何标量类型名称(5.2.4)。允许这样就可以编写代码而不必知道给定类型是否存在析构函数。例如,

typedef int I;

I * p;

p-> I ::〜I();

就要收注]

+0

谢谢。我的动机是,如果我不调用某些对象的析构函数,我可以加速数据结构的特定部分。所以我试图决定是否有一个不平凡的析构函数。任何线索? – bitmask

+0

@bitmask:因为你的问题是关于_C++ 03_的,所以最好的办法就是'boost :: has_trivial_destructor'类型特征,只有编译器提供了合适的内在特征时才适用。但是如果一个析构函数是微不足道的,我仍然会调用它,让编译器优化它... –

+0

嗯,我必须忍受一个残缺的C++子集,因为我没有提升,也没有C++ 11。我不必摧毁一个对象,而是一堆对象,但如果它们很琐碎,就不必做任何事情,所以我不希望迭代被优化掉,所以我想把它烧成代码。 – bitmask