C++ C++;向量机的堆栈分配

C++ C++;向量机的堆栈分配,c++,C++,以下代码在堆栈上会发生什么 具体来说,我认为温度应该存储在堆栈上,对吗 然后,当temp被重新分配给一个新的空向量时,前一个包含2和3的temp如何 它已被删除,不再在堆栈上 谁删除了 int main() { vector<int> temp; temp.push_back(2); temp.push_back(3); temp = vector<int>(); } intmain(){ 向量温度; 温度推回(2); 温度推回(3); temp=向量(); } 一步一

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

具体来说,我认为温度应该存储在堆栈上,对吗


然后,当temp被重新分配给一个新的空向量时,前一个包含2和3的temp如何

它已被删除,不再在堆栈上

谁删除了

int main() {
vector<int> temp;
temp.push_back(2);
temp.push_back(3);
temp = vector<int>();
}
intmain(){
向量温度;
温度推回(2);
温度推回(3);
temp=向量();
}
一步一步

int main() {
vector<int> temp;
如有必要,向量在堆上分配默认量
int

参数被复制到第一个插槽(堆上)。
向量中的状态变量将被更新。
堆栈上的空间分配未更改

temp.push_back(3);
temp = vector<int>();
}
向量将值3放入堆上分配的内存的第二个插槽中。
向量中的状态变量将被更新。
堆栈上的空间分配未更改

temp.push_back(3);
temp = vector<int>();
}
temp
向量从堆栈中移除(其析构函数被调用)。
堆栈的大小应与执行之前的
main
相同

向量的析构函数从堆中删除它分配的内存

编辑1:

注意:向量元素的存储取决于实现。向量可以将其数据存储在堆栈上(比如类中的元素有一个默认区域)。一个常见的实现是对元素使用堆

“然后,当temp被重新分配给一个新的空向量时”--否。临时空向量的值被分配给
temp
。对象
temp
仍然存在,其生存期一直存在到作用域结束。赋值运算符只修改其内部状态。为什么需要知道物理内存位置?代码到规范。“向量创建可能会在堆上分配默认数量的int。”这到底意味着什么?请你停止传播这个堆栈/堆的废话好吗?C++是从设计细节中抽象出来的,非常重要的是,通过使用初学者的语言——堆和堆栈。向量在动态内存中创建一个默认区域来存储
int
s。这意味着向量有一个初始的默认容量。我希望我们停止使用“错误的语言”并称之为“初学者的语言”,尤其是当初学者受到这个习惯的影响最严重时。至于容量,这是100%未指定。它可能/可能/将/将/可能没有任何初始容量。