我有一个类,ResourceManifest
它从文件中加载 3d 模型并将它们保存在向量中,然后按要求分发它们。也可以从存储中删除缓存的 3dmodel,我希望我的其他组件在发生这种情况时能意识到这一点。这是我现在拥有的,但它不能满足我对属于ResourceManifest
该类的唯一所有权的意图
typedef boost::shared_ptr<Model> ModelPtr;
class ResourceManifest
{
public:
ResourceManifest(IRenderer& renderer);
~ResourceManifest();
ModelPtr LoadModel(const std::string& modelName, const std::string& assetName);
ModelPtr GetModel(const std::string& modelName);
void DeleteModel(ModelPtr model);
private:
IRenderer& mRenderer;
std::vector<ModelPtr> mModels;
IMemoryAllocator& mMemoryAllocator;
};
在我的第一次尝试中,我将其保留Model
为 shared_ptrs; 但结果是,正如暗示的那样,它是共享所有权,我只希望位于向量内的副本ResourceManifest
成为所有者。我想要一个智能指针的原因只是为了能够查询它是否Model
仍然存在,这是我不能用原始指针做的事情。
我知道weak_ptr,但如果可能的话,我宁愿避免使用它的语法;如果可能的话,我想像普通指针一样使用它,就像这样......
ModelPtr modelCube = resourceManifest.GetModel("Cube");
...... later on
if (modelCube)
modelCube->render();