2014-02-05 47 views
2

有沒有辦法使用模板,宏或二者的組合來檢查類內部的空析構函數以及它繼承的類內部? (is_trivially_destructible不會產生我所需要的)。檢查空的析構函數

class Test 
{ 
    public: 
    ~Test(){}; 
}; 

class Temp2 : public Test 
{ 
}; 
+1

簡短的回答是,不,這是不可能的。 –

+4

......但是你想要作爲一個更大的圖片來實現什麼? – Shoe

+0

@Jefffrey我知道一些編譯器可以刪除調用空析構函數的循環,但是我想知道是否可以檢測到空析構函數。 – user985611

回答

0

構造函數「是空的」並不意味着什麼,因爲任何非POD成員對象將/隱含/在那裏由編譯器(即使沒有析構函數聲明)破壞。

所以,其實你要的是有可能

  • std::is_pod<T>::value

    當心:MSVC gets it wrong(例如,用於struct X : std::array<int, 4> {} POD)

  • std::is_trivial<T>::value

這個想法是,只有構造函數沒有做任何魔術時,構造函數才能被跳過。施工和銷燬的目的是保持完美的平衡,所以如果施工方也是如此,那麼你就知道這個破壞器是微不足道的。

+0

*一個可以複製的*類需要一個微不足道的dtor。所以,如果OP拒絕'is_trivially_destructible','is_pod'和'is_trivial'(這兩個都需要*可複製*)不會有幫助。 – dyp

+0

@dyp哦。嘖嘖。我認爲「is_trivially_destructible沒有產生我所需要的」大部分是有意義的,因爲那個特質不存在(我沒有聽說過)。傻我 – sehe