2016-05-05 4 views
1

私はC++でプログラミングしていて、2Dベクトルを手動で割り当て解除する必要があるかどうか疑問です。例:C++で2Dベクトルを解体する方法

class A{ 
    private: vector<vector<int> > a; 
    public: A(vector<int> &input0,vector<int> &input1){ 
    a.push_back(input0); 
    a.push_back(input1); 
    } 
    ~A(){//should i do something here?} 
} 

int main(){ 
    vector<int> a0(3); 
    vector<int> a1(3); 
    A my_A(a0,a1); 
} 

この例では、クラスAのデコンストラクタのprivate変数aを解体する必要がありますか?はいの場合、どうすればよいですか?

+0

*手動で2dベクトルの割り当てを解除する必要がある場合* - 答えはいいえです。 – PaulMcKenzie

+2

'ベクトル<>'はコンパイルされません。 –

+1

関連性が非常に高い:http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three – NathanOliver

答えて

4

いいえ、必要はありません。

std::vectorは、すべての標準ライブラリの機能として、適切な破壊を処理するデストラクタ自体を備えています。手動で破壊する必要があった場合、ユーザーは破壊を容易に忘れることができ、メモリにアイドル状態のstd::vectorが存在することになります。

ただし、ヒープ割り当てオブジェクトをstd::vectorに保存する必要がある場合は、deleteにする必要があります。 std::vectorのデストラクタは、ポインタがヒープメモリを指していることを知ることができないため、そのメモリを解放しません。その場合は、必要に応じてstd::unique_ptrまたはstd::shared_ptrを使用してください。

+0

ありがとう!しかし、ヒープ割り当てオブジェクトは何ですか?それは、ポインタと同様にメモリを割り当てるために "新しい"のようなものを使用しない限り、私は安全でなければならないということですか? –

+0

@jywヒープに割り当てられたオブジェクトは、 'new'を使って割り当てられたオブジェクトです。 'int * i = new int;' i'はヒープ割り当てオブジェクトを指します。はい、まさにそれを意味します。しかし、私が言ったように、 'std :: unique_ptr'や' std :: shared_ptr'を使ってヒープ割り当てオブジェクトを自動的に 'delete 'することもできます。 – Downvoter

関連する問題