1

我有一个指针数组:pArray[rows][columns],其中每个元素都可以包含一个指向对象的指针。有些对象是在main()堆上实例化的,有些对象本身也在堆上实例化:也就是说,我传递pArray给一个对象成员函数,该函数创建了一个新对象,并将指向它的指针放入pArray.

现在,当我想从中删除指向对象的指针时pArray,这里有所有权吗?意思是,如果一个对象创建了一个新对象并将指向它的指针放在 中pArray,那么只有创建者对象才能对该指针调用 delete 吗?或者我可以main()通过将数组传递给它们来从 , 和其他对象中做到这一点吗?

更多细节:

pArray该代码在网格 ( )上模拟捕食者猎物模型。所以我首先从一个文件中读取初始网格配置,然后实例化对象(捕食者和猎物),pArraymain(). 但是捕食者和猎物可以繁殖,所以对象会产生新的对象,并通过传递pArray给它们,实例化它们的子对象pArray

4

4 回答 4

5

对于原始指针,所有权纯粹是一个概念。只要您使用原始指针,您就可以将指向对象的所有权分配给任何人和任何事物。这是你的设计问题。没有这样的“规则”,即对象应该由创建它们的人删除。所有权可以保留或传递。所有权可以共享(如在引用计数所有权方案中)。同样,这取决于您的设计和意图。

各种智能指针类将帮助您表达您的意图并实现您的意图。使用原始指针,您必须记住谁拥有什么并手动执行所有操作。

于 2012-07-07T17:37:33.233 回答
2

不,C++ 中的指针没有“所有权”,如果指针有效(包含对数据/对象的正确引用),您可以在任何发出delete命令的地方解除分配它。

于 2012-07-07T17:26:25.660 回答
1

C++ 中的指针没有所有权概念。据我了解您的问题,是的,在动态内存分配的情况下,您可以从 main() 中删除该对象。分配给该对象的内存只有在程序结束或对象数组超出范围并且调用该类的析构函数时才会被释放。

于 2012-07-07T17:29:27.390 回答
1

对象的析构函数与其他所有方法一样受制于相同的公共/受保护/私有。因此,如果析构函数是公开的,那么任何人都可以在对象上调用 delete。

唯一重要的是它只发生一次,并且只有在没有人再使用该对象之后。

于 2012-07-07T17:28:53.707 回答