谁应该拥有指针

Gri*_*art 4 c c++ pointers memory-management

在编程时,我经常遇到以下设计选择:用户创建一个对象并将其传递给另一个在第二阶段以某种方式处理的对象.

举个例子,你可以想象一个光线跟踪器.用户创建具有特定属性和调用的球体raytracer.addTraceable(sphere).现在,有三种方法可以让我想到这样做.

  1. 光线跟踪器负责释放分配给球体对象的内存
  2. 用户需要释放分配给sphere对象的内存.
  3. 光线跟踪器只复制球体对象,用户和光线跟踪器都会释放它们的本地副本.

一般来说,在这种情况下,最好的设计选择是什么?除了我提到的那些(不包括智能指针)之外还有其他选择吗?

PS:在使用面向对象的方法时,我在普通C中遇到了同样的问题.

Mar*_*som 6

一致使用RAII使这成为一个有争议的问题.使用诸如std::shared_ptr对象之类的智能指针由所有指针拥有,并在最后一个指针被销毁后被删除.

C实际上没有一种方便的方式来表达RAII成语.