如何在c++中停止在循环中创建对象
How to stop a object being created in a loop from begin destroyed in c++?
我已经定义了一个结构体:
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;
SimpleClass * anObject = new SimpleClass(i);
aSomething.object = anObject;
array[i] = aSomething;
把这个放到for循环中而不是原来的
另外,我建议使用new而不是malloc来创建数组,因为您正在使用c++
你必须小心变量的作用域,因为你依赖于堆栈。
SimpleClass anObject = SimpleClass(i);
将在循环结束时销毁。为了保持某些东西的持久性,你应该用new
为它分配新的内存。
SimpleClass* anObject = new SimpleClass(i);
aSomething.object = anObject;
array[i] = aSomething;
这应该能解决你的问题。您还必须确保稍后删除它,否则您将获得内存泄漏。
for(int i = 0; i < sizeOfArray; i++)
{
delete array[i].object;
}
注意,在您的示例
中something aSomething
也会在循环结束时被删除
1)使用new操作符创建对象而不是malloc
something* array = new something[2];
2)因为你在for循环结束后创建局部对象,局部对象"anObject"被销毁。所以你在for循环外看到了错误而是创建一个动态对象来存储。
something*aSomething = new something();
SimpleClass* anObject = new SimpleClass(i);
aSomething->object = anObject;
array[i] = aSomething;
使用关键字'new'创建数组及其元素。Malloc是C语言的东西,在c++中已经过时了。
相关文章:
- 正在使用for循环创建QScatterSerie
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- 使用循环创建类对象
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 有没有办法在C++中循环访问对象的不同数据成员
- 在C++中使用循环创建多个对象
- 我想在 C++ 中使用 for 循环创建类对象
- 循环创建对象以进行C++
- C ++为什么在循环中创建对象时需要'new'
- C++:如何在循环中的堆栈上创建对象
- C vs Java:无尽的循环创建对象仅崩溃C
- 在循环中创建对象时,内存泄漏
- 在循环中动态创建对象
- 而在循环中创建对象并将其添加到向量总是添加相同的对象
- 在for循环中创建对象
- 如何在c++中停止在循环中创建对象
- 如何使用new操作符创建对象并使用for循环
- 如何在c++中使用for循环创建多个对象?