堆还是堆栈用于创建对象?

Heap or stack for creating objects?

本文关键字:创建对象 用于 堆栈      更新时间:2023-10-16

我有这个程序,它可以创建"计算机组件"并将其存储在向量中并将对象写入文件。 如果我在堆栈上创建对象并将内存地址传递给向量,则会出现错误 如果我在堆上创建对象并将指针传递给向量,它工作得很好"组件是一个 absract 基类"和"CPU 是组件的派生类" 有人可以解释为什么会这样吗?

vector<Component*>components;
CPU x;
CPU*y = new CPU();
components.push_back(&x) // results in debug error
components.push_back(y) // works fine.
writeTofile(components);

通过这样做

CPU x; components.push_back(&x);

您在堆栈上创建一个本地对象,并将其地址推送到向量。当函数超出范围时,您的本地对象不再处于活动状态,并且它在向量中的地址无效。