我正在使用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吗?如果是的话,我该怎么做?
答案 0 :(得分:4)
不,你不需要。
std::vector
,因为所有标准的库设施都有自己的析构函数,它们负责正确的破坏。如果你不得不手动破坏它,用户可能很容易忘记破坏,并最终在内存中有一个空闲的std::vector
。
但是,如果你应该在std::vector
中存储堆分配的对象:你需要delete
。 std::vector
的析构函数无法知道指向堆内存的指针,因此它不会释放该内存。在这种情况下,只需使用std::unique_ptr
或std::shared_ptr
,无论您需要什么。