我有一些像这样的代码:
// 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 reference和this 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
?