正确使用智能指针和编程风格

Gra*_*pes 3 c++ c++11

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

class DisplayObject {
    DisplayObject* Parent;
};

class DisplayObjectContainer: public DisplayObject {
    std::vector<DisplayObject*> Children;
};

class Stage {
    std::vector<std::unique_ptr<DisplayObject>> DisplayObjects;
};
Run Code Online (Sandbox Code Playgroud)

使用
make_unique<DisplayObject>
或创建项目
make_unique<DisplayObjectContainer>

Stage将拥有所有DisplayObject类,但是会有一个DisplayObjectContainer指向Stage拥有的对象的原始指针.

DisplayObject也将有一个家长(可以nullptr).

当我将项目添加到vector(DisplayObjects.back().get())并大量使用时,我也使用Stage的DisplayObjects并获取指向它的对象的指针std::move

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

小智 5

看看你的代码,是的.这看起来是组织代码的一种非常好的方法:你有一个保持显式所有权的类,而使用原始指针的每个其他类都不拥有它所指向的内容.这将使您的代码保持清洁,高效,并且每个使用它的人都知道什么时候打破,以及如何打破.

只要确保你是否开始分享这些代码,你就先告诉所有人,原始指针意味着它不拥有资源,并且他们不会自己删除或新建资源.预先知道这一点可以避免混淆人们使用/传递给你的方法的指针是否需要手动新建.

边注:

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