c++ - 在 C++ 库中,谁应该删除指针,用户还是库?

标签 c++ pointers

我能给出的最好的例子是 javascript 中的 Three.js 库:

function createMesh(){
   var geometry = new THREE.SphereGeometry(10, 5, 5);
   var material = new THREE.MeshPhongMaterial();
   var mesh = new Mesh(geometry, material);

   return mesh;
}

这在 C++ 中转换为:

Mesh* createMesh(){
   SphereGeometry* geometry = new SphereGeometry(10, 5, 5);
   MeshPhongMaterial* material = new MeshPhongMaterial;
   Mesh* mesh = new Mesh(geometry, material);

   return mesh;
}

现在,谁应该负责删除这 3 个指针。它应该是图书馆的用户吗?还是应该在 Mesh 的析构函数中销毁几何体和 Material ,而用户只删除 Mesh 指针?如果是这种情况,玩家如何知道不删除他的指针并避免双重删除?

此外,如果发生这种情况怎么办:

SphereGeometry geometry(10, 5, 5);
MeshPhongMaterial material;
Mesh* mesh = new Mesh(&geometry, &material);

谢谢。

最佳答案

有了智能指针,归属一目了然:

std::unique_ptr<Mesh> createMesh(){
   auto geometry = std::make_unique<SphereGeometry>(10, 5, 5);
   auto material = std::make_unique<MeshPhongMaterial>();
   return std::make_unique<Mesh>(std::move(geometry), std::move(material));
}

关于c++ - 在 C++ 库中,谁应该删除指针,用户还是库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45022081/

相关文章:

c++ - 转换运算符正在切割我的对象

c++ - 避免在给定示例上重新分配内存

c++ - 在 OSX 10.8.3 上安装 Qwt 6.02 时出错

c++ - 为什么自动说明符从 &pointer 推断出 "top and low"级别常量?

c - 为什么 printf() 在 Windows 上打印这个神秘的额外文本?

c - 从输入动态分配矩阵 - C

c++ - std::tolower 和 Visual Studio 2013

c++ - 什么可能导致确定性过程产生浮点错误

c - C中的double类型和short类型有什么区别?

c - C错误中的LinkedList