我能给出的最好的例子是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;
}

现在,谁应该负责删除这三个指针。应该是图书馆的用户吗?还是应该在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/

10-12 20:27