【发布时间】:2014-12-12 14:30:23
【问题描述】:
我有 3 个对象,我们称它们为 Main、Manager 和 Item。
Manager 需要有一个 Items 数组。这些Items 从Main 对象添加到Manager。
我想知道我应该如何将 Items 传递给 Manager 以使它们即使在 Main() 函数范围之外仍然存在,但同时能够在Manager 被销毁。
注意
Item,在Manager 内部,必须是指针,因为我需要检查 NULL 项
到目前为止,我有这样的东西(不是实际的代码):
Main
{
Manager* Man;
Main()
{
Man = new Manager(/**/); //i use a pointer because i need this object to persist;
Item* it = new Item(/**/);
Man->AddItem(it);
}
~Main()
{
delete(Man);
}
}
Manager
{
Item* ItemArchive[15];
void AddItem(Item* item)
{
ItemArchive[index] = item;
}
~Manager()
{
for(int i=0;i<archiveLength;i++)
delete(ItemArchive[i]); //Here i get a runtime error,most probably an
//access violation,can't be more specific
//because Unreal Engine doesn't give me that info
}
}
Item
{
//just a basic object
}
所以我的问题是,如何在Main 中创建对象,然后在Manager 中使用和删除它们?
【问题讨论】:
-
一般来说,我不会命名函数或其他实体 Main() 或 main()。我也会避免将可执行文件命名为“test”或“ls”。
-
一般来说,像“删除管理器时删除项目”这样的清理属于析构函数。如果您复制指针,只需确保它们指向的对象不会超出范围,例如通过使用新的或现代的 unique/shared_ptr 模板;另一方面,确保在经理删除它们后不再使用它们(即经理拥有所有权)。后者在复杂程序中可能不那么简单,但现代 C++ 智能指针工具可以提供帮助。
-
“我使用指针是因为我需要这个对象来持久化” - 持久化到什么程度?无论如何,它都会在析构函数中被破坏。我不明白你为什么不能让
Manager成为会员。 -
@giorgim 感谢您的链接
标签: c++ object segmentation-fault new-operator delete-operator