【发布时间】:2012-07-07 19:02:30
【问题描述】:
我有一个指针数组:pArray[rows][columns],其中每个元素都可以包含一个指向对象的指针。有些对象是在堆上的main()中实例化的,有些对象本身也在堆上实例化:也就是说,我将pArray传递给一个对象成员函数,该函数创建了一个新对象,并将pArray 中指向它的指针。
现在,当我想从pArray 中删除指向对象的指针时,这里有所有权吗?意思是,如果一个对象创建了一个新对象并在pArray中放置了一个指向它的指针,那么只有创建者对象才能对该指针调用delete吗?或者我可以通过将数组传递给main() 和其他对象来实现吗?
更多细节:
代码在网格 (pArray) 上模拟捕食者猎物模型。因此,我首先从文件中读取初始网格配置,并在 pArray 上从 main() 实例化对象(捕食者和猎物)。但是捕食者和猎物可以繁殖,所以对象会产生新对象,并通过将pArray 传递给它们,它们会在pArray 上实例化它们的子对象。
【问题讨论】:
-
无法笼统地回答这个问题。您可以根据代码的意图找出所有权问题。但是你可以在任何地方调用
delete,只要对每个对象只调用一次,并且一旦对象被删除就不要尝试使用它。智能指针通常可用于减轻跟踪所有权的负担。 -
这些对象有一个“所有者”有意义吗?如果没有,你应该看看
shared_ptr。 -
听起来你好像在问一个引用计数问题,它在 COM 中处理(如果你在 Windows 上)。我不了解非 Windows 平台。