如何使用unique_ptr自动管理vector <vector <int>&gt;

时间:2016-10-13 22:15:39

标签: c++ unique-ptr

我在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超出范围时我必须手动清理东西?

2 个答案:

答案 0 :(得分:5)

你过度复杂了。 vector已经自我清理了(当范围超出范围时,将为顶级vector调用析构函数,并自动为每个包含的vector调用它,这只是引入了额外的间接和分配器开销。

答案 1 :(得分:3)

这里不需要使用unique_ptr。当对象超出范围时,std :: vector将释放内存。