假設我有如何獲取析構函數的成員函數指針?
struct X {
~X() {}
};
什麼類型,我如何獲得C++ 03的X::~X()
成員函數指針?
我不想實際調用它,只是在SFINAE中用來判斷是否存在給定類型的析構函數。
假設我有如何獲取析構函數的成員函數指針?
struct X {
~X() {}
};
什麼類型,我如何獲得C++ 03的X::~X()
成員函數指針?
我不想實際調用它,只是在SFINAE中用來判斷是否存在給定類型的析構函數。
你不能得到析構函數的指針或構造函數。儘管如此,對於某個類型總是存在析構函數,並且您無法檢測到帶有as訪問說明符的private
是否不被SFINAE所考慮。
上調用這將是一個標量類型的析構函數的主體,標準說[class.dtor]/16:
[注:符號的析構函數的顯式調用可以用於任何標量類型名稱(5.2.4)。允許這樣就可以編寫代碼而不必知道給定類型是否存在析構函數。例如,
typedef int I;
I * p;
p-> I ::〜I();
就要收注]
謝謝。我的動機是,如果我不調用某些對象的析構函數,我可以加速數據結構的特定部分。所以我試圖決定是否有一個不平凡的析構函數。任何線索? – bitmask
@bitmask:因爲你的問題是關於_C++ 03_的,所以最好的辦法就是'boost :: has_trivial_destructor'類型特徵,只有編譯器提供了合適的內在特徵時才適用。但是如果一個析構函數是微不足道的,我仍然會調用它,讓編譯器優化它... –
嗯,我必須忍受一個殘缺的C++子集,因爲我沒有提升,也沒有C++ 11。我不必摧毀一個對象,而是一堆對象,但如果它們很瑣碎,就不必做任何事情,所以我不希望迭代被優化掉,所以我想把它燒成代碼。 – bitmask
析構函數** **總是存在... –
@OliCharlesworth:但是,作爲一個實際的功能?當我從棧中彈出一個'int'時,沒有調用int ::〜int'函數。 – bitmask
@bitmask:'int'不是'class',所以它沒有_destructor_。 –