我只是读了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 本身不会对其产生任何影响。

这就是他们的目的!

09-25 17:54
查看更多