我有一个Mesh课程。
我有另一个名为Safemesh的课程。
许多safemeshes存储指向同一个Mesh的指针。
当我调用Safemesh的析构函数时,我不想删除我的网格。
我该怎么做?
答案 0 :(得分:1)
当我打电话给Safemesh的析构函数时,我不想删除我的网格。
我该怎么做?
不删除Safemesh的析构函数中的Mesh指针。如果析构函数不需要或者不需要做任何其他事情,那么隐式生成的析构函数就可以了。
示例:
struct Mesh;
struct Safemesh {
Mesh* mesh;
};
这当然会让你在别处摧毁网格。
一种解决方案是将Meshes存储在容器中,并确保在任何依赖Safemesh被销毁或设置为指向其他地方之前,不会销毁该容器的任何元素。例如:
std::vector<Mesh> meshes(2);
Safemesh safe0 { &meshes[0] };
Safemesh safe1 { &meshes[0] };
Safemesh safe2 { &meshes[1] };
Safemesh safe3 { &meshes[1] };
另一种解决方案是使用共享所有权:当指向特定网格的最后一个Safemesh被销毁时,只有这样才能销毁网格。这可以通过使用引用计数来实现。标准库中有一个引用计数智能指针:std::shared_ptr
。例如:
struct Safemesh {
std::shared_ptr<Mesh> mesh;
};