c++ - 用于创建对象的堆或堆栈?

标签 c++ object stack heap-memory

<分区>

我有一个创建“计算机组件”并将其存储在 vector 中并将对象写入文件的程序。 如果我在堆栈上创建对象并将内存地址传递给 vector ,我会得到一个错误 如果我在堆上创建对象并将指针传递给 vector ,它就可以正常工作“组件是一个抽象基类”和“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);

您在堆栈上创建一个本地对象并将其地址压入 vector 。当函数超出范围时,您的本地对象不再存在,并且它在 vector 中的地址无效。

关于c++ - 用于创建对象的堆或堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59373907/

相关文章:

c++:转换日期时间以用作文件名

c++ - 从文件中读取值并使用类

javascript - 使用变量作为多维对象中的键

javascript - 基于属性的动态限制队列的数据结构/算法

c++ - 如何在不使用继承的情况下将模板实例化为 'rename'?

c++ - C++中的多线程分子模拟

php - 动态方法名

objective-c - Objective-C 中的类对象和实例变量

java - 将堆栈元素移回到单链表

c - 基本堆栈中的内存泄漏