这是考虑智能指针和使用原始指针进行非所有权的正确方法吗?
class DisplayObject {
DisplayObject* Parent;
};
class DisplayObjectContainer: public DisplayObject {
std::vector<DisplayObject*> Children;
};
class Stage {
std::vector<std::unique_ptr<DisplayObject>> DisplayObjects;
};
使用
来创建项目
make_unique<DisplayObject>
或
make_unique<DisplayObjectContainer>
Stage将拥有所有DisplayObject
个类,但DisplayObjectContainer
将拥有Stage拥有的对象的原始指针。
DisplayObject
也会有一个家长(可以是nullptr
)。
当我将项目添加到向量(DisplayObjects.back().get()
)并大量使用std::move
这是使用智能指针和所有权的正确方法吗?
答案 0 :(得分:5)
看看你的代码,是的。这看起来是组织代码的一种非常好的方法:你有一个保持显式所有权的类,而使用原始指针的每个其他类都不拥有它所指向的内容。这将使您的代码保持干净,高效,并且每个使用它的人都会知道什么时候打破,以及如何打破。
只要确保你是否开始分享这些代码,你就先告诉所有人,原始指针意味着它不拥有资源,并且他们不会自己删除或新建资源。提前知道这一点可以避免混淆人们使用/传递给你的方法的指针是否需要手动换新。
旁注:
DisplayObject
? DisplayObjectContainer
?听起来很像C ++的AS3's display hierarchy!听起来很有趣。祝你一切顺利。