c++ - 如何阻止在 C++ 中从开始销毁循环中创建的对象?

标签 c++ object memory struct

我定义了一个结构:

struct something {
    SimpleClass *object;
};

我想创建一个声明的这些结构的数组

something* array = (something*)malloc(sizeof(something) * 2);

然后,我循环创建结构,用对象填充它,并将其添加到数组中:

for (int i = 0; i < 2; i++) {
    something aSomething;
    SimpleClass anObject = SimpleClass(i);
    aSomething.object = &anObject;
    array[i] = aSomething;
    // Point 1
}
// Point 2

在某些时候,对象会被销毁,因为如果我调用此行(例如):

array[0].object->doSomething();

它在“Point 1”处运行良好,但在“Point 2”处出现错误。

提前致谢。

最佳答案

对象正在被销毁,因为它们是循环本地的(在堆栈上创建)。相反,您必须使用关键字 new 才能在堆上创建它。尝试这样做
something & aSomething = *new something;<br/> SimpleClass * anObject = new SimpleClass(i);<br/> aSomething.object = anObject;<br/> array[i] = aSomething;
将其放入 for 循环而不是您拥有的
另外,我建议使用 new 而不是 malloc 来创建数组,因为您使用的是 c++

关于c++ - 如何阻止在 C++ 中从开始销毁循环中创建的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16990236/

相关文章:

c++ - C++ 的 Web 服务客户端库

c++ - cstdint 和 tr1/cstdint 之间的区别

c++ - 在多文件程序中使用 "curiously recurring template pattern"

java - 改变已设置为相等的对象

php - 处理MySQL查询结果时如何限制PHP内存使用?

c++如何测试堆中的某一位内存是否空闲?

c - "sendmsg"是否释放缓冲区或消息的内存?

c++ - 将外部库添加到 Qt Creator 项目中

javascript - json 问题,通过变量设置键名

PHP JSON 获取对象的名称