我在c ++函数中使用向量向量。
vector<vector<int>> foo
当这个对象超出范围时,我想自动释放内存。为了做到这一点,我使用以下代码:
unique_ptr<vector<unique_ptr<vector<int>>> foo(new vector<unique_ptr<vector<int>>())
听起来是对的还是我不必要的复杂化?
PS:如果不使用unique_ptr我想在堆上分配向量。那是
vector<vector<int>>* foo = new vector<vector<int>>();
所以我认为当foo超出范围时我必须手动清理东西?
答案 0 :(得分:5)
你过度复杂了。 vector
已经自我清理了(当范围超出范围时,将为顶级vector
调用析构函数,并自动为每个包含的vector
调用它,这只是引入了额外的间接和分配器开销。
答案 1 :(得分:3)
这里不需要使用unique_ptr。当对象超出范围时,std :: vector将释放内存。