gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:03 25 4
gpt4 key购买 nike

我已经定义了一个结构:

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();

它在“第 1 点”运行良好,但在“第 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/

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