3

这是思考智能指针和使用原始指针进行非所有权的正确方法吗?

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类,但 aDisplayObjectContainer将具有指向 Stage 拥有的对象的原始指针。

DisplayObject还将有一个 Parent (可以是nullptr)。

当我将项目添加到向量 ( DisplayObjects.back().get()) 并大量使用std::move

这是使用智能指针和所有权的正确方法吗?

4

1 回答 1

5

看你的代码,是的。这看起来是一种组织代码的完美方式:您有一个保持显式所有权的类,而使用原始指针的每个其他类都不拥有它所指向的内容。这将使您的代码保持干净、高效,并且每个使用它的人都会知道什么时候中断以及如何中断。

只要确保如果您确实开始共享此代码,您会预先告诉所有人原始指针意味着它不拥有资源,并且他们不会自己删除或新建资源。预先知道这一点将防止人们对人们使用/传递给您的方法的指针是否需要手动新建的混淆。

边注:

DisplayObject? DisplayObjectContainer? 听起来很像AS3 的C++ 显示层次结构!听起来很有趣。祝你一切顺利。

于 2013-04-15T04:37:12.687 回答