向量的C ++堆栈分配

时间:2016-04-22 23:18:05

标签: c++

以下代码在堆栈上会发生什么?

具体来说我认为temp应该存储在堆栈上吗?

然后当temp被重新分配给一个新的空置向量时,包含2和3的前一个temp怎么样?

它不再在堆栈中被删除了吗?

谁删除了?

int main() {
vector<int> temp;
temp.push_back(2);
temp.push_back(3);
temp = vector<int>();
}

1 个答案:

答案 0 :(得分:1)

一步一步。

int main() {
vector<int> temp;

上面一行创建了vector<int>类型的局部变量。 vector类的成员生活在堆栈中。

vector创建可以在堆上分配默认的int(注意:vector类可能会等待第一个push_back以便在堆上进行分配。)

temp.push_back(2);

如果需要,向量在堆上分配默认值int 该参数被复制到第一个插槽中(在堆上) 向量中的状态变量已更新 堆栈上的空间分配不会更改。

temp.push_back(3);

向量将值3放入堆上分配的内存的第二个插槽中 向量中的状态变量已更新 堆栈上的空间分配不会更改。

temp = vector<int>();

temp被分配给一个新的向量 堆上的旧向量值被取消分配 向量中的状态变量已更新 堆栈上的空间分配不会更改。

}

从堆栈中移除temp向量(调用其析构函数) 堆栈应与执行main之前的大小相同。

vector的析构函数删除它从堆中分配的内存。

编辑1:
注意:矢量元素的存储取决于实现。向量可以将其数据存储在堆栈中(例如,类中的元素具有默认区域)。常见的实现是将堆用于元素。