我有一个指针数组:pArray[rows][columns],其中每个元素都可以包含一个指向对象的指针。一些对象是在堆上的main()中实例化的,还有一些是由对象本身在堆上实例化的:也就是说,我将pArray传递给了一个对象成员函数,该函数创建了一个新对象,并在pArray中放置了一个指向该对象的指针。
现在,当我想从pArray中删除指向对象的指针时,这里有所有权吗?也就是说,如果一个对象创建了一个新对象并在pArray中放置了一个指向该对象的指针,那么只有创建者对象才能在该指针上调用delete吗?或者我可以在main()和其他对象中通过将数组传递给它们来做到这一点吗?
更多细节:
代码模拟网格上的捕食者和猎物模型(pArray)。因此,我首先从一个文件中读取初始网格配置,并从main()在pArray上实例化对象(捕食者和猎物)。但是捕食者和猎物可以繁殖,所以对象会产生新的对象,通过将pArray传递给它们,它们会在pArray上实例化它们的孩子。
发布于 2012-07-08 01:26:26
不,C++中的指针没有“所有权”,如果指针有效(包含对数据/对象的正确引用),您可以发出delete命令将其释放到任何地方。
发布于 2012-07-08 01:37:33
对于原始指针,所有权纯粹是一个概念。只要您使用的是原始指针,那么将指向对象的所有权分配给任何人和任何东西完全取决于您。这是你的设计问题。没有这样的“规则”,即对象应该由创建它们的人删除。所有权可以保留或传递。所有权可以共享(就像引用计数的所有权方案一样)。再一次,这是你的设计和意图的问题。
各种智能指针类将帮助您表达您的意图并实现您的意图。使用原始指针时,您必须记住谁拥有什么,并手动执行所有操作。
发布于 2012-07-08 01:28:54
像其他方法一样,对象的析构函数受到相同的public/protected/private的约束。因此,如果析构函数是公共的,任何人都可以在对象上调用delete。
唯一重要的是,它只发生一次,并且只有在没有人再使用该对象之后才会发生。
https://stackoverflow.com/questions/11377126
复制相似问题