如何在c ++中解构2D向量

时间:2016-05-05 16:00:21

标签: c++

我正在使用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类的解构器中解构私有变量a吗?如果是的话,我该怎么做?

1 个答案:

答案 0 :(得分:4)

不,你不需要。

std::vector,因为所有标准的库设施都有自己的析构函数,它们负责正确的破坏。如果你不得不手动破坏它,用户可能很容易忘记破坏,并最终在内存中有一个空闲的std::vector

但是,如果你应该在std::vector中存储堆分配的对象:你需要deletestd::vector的析构函数无法知道指向堆内存的指针,因此它不会释放该内存。在这种情况下,只需使用std::unique_ptrstd::shared_ptr,无论您需要什么。