我只是读了this post on SO,它讨论了STL vector 在内存中的存储位置。根据公认的答案,
vector<int> temp;
vector 在堆栈上的 header 信息,但在堆上的内容。
在这种情况下,以下代码是否会出错?
vector<int> some_function() {
vector<int> some_vector;
some_vector.push_back(10);
some_vector.push_back(20);
return some_vector;
}
我应该改用
vector<int> *some_vector = new vector<int>
吗?上面的代码会导致某些代码的内存分配问题吗?如果我使用自定义类的实例而不是int
,会发生这种变化吗? 最佳答案
您的代码完全正确。
vector 管理它们分配给您的所有内存。
不管是使用动态分配存储所有内部数据,还是保留一些元数据作为直接成员(具有自动存储持续时间)都没有关系。内部执行的任何动态分配都将在vector的析构函数,复制构造函数和其他类似的特殊函数中安全清除。
您无需执行任何操作,因为所有这些操作都是从代码中抽象出来的。您的代码没有对该机制的可见性,并且动态分配 vector 本身不会对其产生任何影响。
这就是他们的目的!