2016-12-08 10 views
1

は、私のようなクラスがあるとします。このクラスのチェック

struct A { 
public: 
    A(int a, int c): a_(a+c), c_(a-c) { } 
    A(const A& arg): a_(arg.a_), c_(arg.c_) { } 
    int a_; 
    char c_; 
}; 

オブジェクトは、いくつかのdinamically割り当てられたメモリ領域の内側に位置しています。このメモリ領域が解放されている間、デストラクタは呼び出されることは想定されていません。 デストラクタが本当に空であることを確認したいと思います。たとえば、誰かがstd::string s_;メンバをクラスAに追加すると、デストラクタが呼び出されない場合は明らかにメモリリークになります。その後、私は追加することができますチェックにはコンストラクタとコピーコンストラクタがなかった場合は

static_assert(std::is_trivial<A>::value) 

しかし、クラスAのために、それは失敗します。

私の質問:そのようなクラスのデストラクタが本当に空であり、何もしないのであれば、何とかコンパイル時にチェックできますか?

std::is_trivially_destructible<A>::value 

#include <type_traits>に確認してください:

答えて