繁体   English   中英

向量的 C++ 堆栈分配

[英]C++ stack allocation for vector

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

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

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

它不再在堆栈上被删除?

谁删了?

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

一步步。

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:
注意:向量元素的存储取决于实现。 向量可以将它的数据存储在堆栈上(例如具有类中元素的默认区域)。 一个常见的实现是对元素使用堆。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM