指针所有权
Pointer Ownership
我有一个指针数组:pArray[rows][columns]
,其中每个元素可以包含一个指向对象的指针。有些对象在堆上以main()
形式实例化,有些对象也由堆上的对象本身实例化:也就是说,我pArray
传递给一个对象成员函数,该函数创建了一个新对象,并在pArray
中放置了一个指向它的指针。
现在,当我想从pArray
中删除指向对象的指针时,这里是否有所有权?这意味着,如果一个对象创建了一个新对象并在pArray
中放置了一个指向它的指针,那么只有创建者对象可以在该指针上调用 delete 吗?或者我可以通过将数组传递给 main()
和其他对象来做到这一点吗?
更多细节:
该代码在网格(pArray
)上模拟捕食者猎物模型。因此,我首先从文件中读取初始网格配置,并在main()
pArray
上实例化对象(捕食者和猎物)。但是捕食者和猎物可以繁殖,所以物体会产生新的物体,并通过pArray
传递给它们,它们在pArray
上实例化它们的孩子。
对于原始指针,所有权纯粹是一个概念。只要您使用原始指针,就完全由您决定将指向对象的所有权分配给任何人和任何东西。这是你的设计问题。没有这样的"规则"规定创建对象的人应该删除对象。所有权可以保留或传递。所有权可以共享(如在引用计数的所有权方案中)。同样,这是您的设计和意图的问题。
各种智能指针类将帮助您表达意图并实现意图。使用原始指针,您必须记住谁拥有什么并手动执行所有操作。
不,C++中的指针上没有"所有权",如果指针有效(包含对数据/对象的正确引用),您可以在任何发出命令的地方释放它delete
。
对象的析构函数与其他所有方法一样受制于相同的公共/受保护/私有。因此,如果析构函数是公共的,任何人都可以对对象调用 delete。
唯一重要的是,它只发生一次,而且只有在没有人再使用该对象之后。
C++ 中没有指针的所有权概念。据我理解您的问题,是的,您可以在动态内存分配的情况下从main()中删除该对象。仅当程序结束或 Object 数组超出范围并调用类的析构函数时,才会释放分配给该对象的内存。
- 智能指针概念所有权和寿命
- 如何指示指针C++所有权
- 如何将所有权从一个共享指针向量转移到另一个向量?
- C++类指针和所有权
- 什么是资源或指针的所有权?
- 进入智能指针,如何处理代表所有权
- 将智能指针所有权转移到容器
- 将原始指针的所有权转移到unique_ptr
- 明智的指针所有权语义和平等
- EIGEN地图 - 它是否占数据指针的所有权
- 带有原子变量的指针所有权
- 如果指针已经被删除,指针容器怎么能拥有指针的所有权
- 是否使用unique_ptr作为所有权和原始指针
- 文件输入和指针所有权语义
- 指针所有权
- 我的自动指针即使在所有权转让后也能正常工作
- 如何证明您传递了指针的所有权
- C++:在共享所有权的情况下,C++11移动语义可以避免指针吗
- Objective-C ARC 指针所有权与C++
- 指向没有所有权的堆栈对象的指针