正确使用存储在类成员向量

时间:2017-05-09 17:49:08

标签: c++ vector std shared-ptr unique-ptr

我有一些像这样的代码:

// MyObj.h
class MyObj
{
    private:
        std::vector<std::shared_ptr<MyObj> > _children;
    public:
        void addChild(std::shared_ptr<MyObj> child);
};

// MyObj.cpp
void MyObj::addChild(std::shared_ptr<MyObj> child)
{
    MyObj::_children.push_back(child);
}

这似乎对我很好,但我想知道我是否使用了正确的智能指针。这些子对象被动态声明并传递给这里存储,并且有getChildren函数返回包含它们的向量。他们应该只住在这里,并且应该在父对象死亡时死亡。

根据this referencethis SO question,我想知道我是不是应该使用std::unique_ptr。我最初尝试过这种方法,并且在尝试通过调用std::move来改变所有权时遇到错误:

void myObj::addChild(std::unique_ptr<MyObj> child)
{
    MyObj::_children.push_back(std::move(child));
}

我可以像我展示的那样使用std::shared_ptr,还是应该使用std::unique_ptr,这会是什么样子?在调用std::move函数时是否还需要使用addChild

0 个答案:

没有答案