[英]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.