2016-07-01 11 views
2

クラスにstd :: vectorがある場合、デストラクタを定義する必要がありますか?クラスのstd :: vectorのデストラクタ

ベースクラスと派生クラスの両方に空の仮想デストラクタを定義すると、メモリリークが発生しますか?

class fruit{ 
    public: 
     uint32_t num_seed; 
     //virtual ~fruit(void){} 
} ; 

class spiky_apple: public fruit{ 
    typedef std::vector<uint32_t> vector; 

    public: 
     vector spikes; 
     void bomb(void); 
      //spikes.reserve(2000) 
      //and then spikes[i] = xyz. 
     //virtual ~spiky_apple(void){} 
} ; 
+4

この場合、コンパイラによって生成されたデストラクタで十分です。 – CoryKramer

+0

おそらく、あなたの質問の 'ベクトル'のためではありません。 –

+0

何とか私がiを反復するとき、spikes [i] = xyzは最初に第0番目のメンバー(例えばptr)へのポインタを取得するよりも遅く、ptr [i] = xyzを実行します。 intel Cコンパイラによる-O3最適化では、比率は3.5秒:3秒です。 – rxu

答えて

1

クラスが動的にメンバーをインスタンス化したり、外部リソースをオープン/作成しない限り、デストラクタを明示的に宣言する必要はありません。デフォルトのものが行います。

+0

もう1つの例外があります:デストラクタが仮想でなければならない場合。 –

関連する問題