gpt4 book ai didi

vector 的 C++ 堆栈分配

转载 作者:行者123 更新时间:2023-11-30 05:28:31 32 4
gpt4 key购买 nike

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

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

那么当temp被重新分配给一个新的空 vector 时,之前包含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 creates 可以分配默认数量 int在堆上。 (注意:vector 类可能会等待第一个 push_back 以便在堆上分配。)

temp.push_back(2);

vector 分配默认数量 int如有必要,在堆上。
参数被复制到第一个槽(在堆上)。
更新 vector 中的状态变量。
堆栈上的空间分配没有改变。

temp.push_back(3);

vector 将值 3 放入堆上分配的内存的第二个槽中。
更新 vector 中的状态变量。
堆栈上的空间分配没有改变。

temp = vector<int>();

temp被分配给一个新的 vector 。
堆上的旧 vector 值被释放。
更新 vector 中的状态变量。
堆栈上的空间分配没有改变。

}

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

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

编辑 1:
注意: vector 元素的存储是依赖于实现的。 vector 可以将它的数据存储在堆栈上(例如类中的元素有一个默认区域)。一个常见的实现是对元素使用堆。

关于 vector 的 C++ 堆栈分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36804710/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com