ciy*_*iyo 1 c++ smart-pointers unique-ptr
我正在处理一个树结构,它具有unique pointers
作为类成员的向量.在研究它时,我意识到如果唯一指针所拥有的对象作为参数,我不确定如何将唯一指针初始化为类成员.
所以,我只是问:如果将拥有的对象作为参数,我应该如何将唯一指针初始化为类成员?
我应该使用new(addTheObject(new Object())
)然后使用std::make_unique
吗?我应该将对象作为unique_ptr(addTheObject(std::unique_ptr<Object>& theObject)
)传递并使用std::move(theObject)
吗?
处理这个问题的正确方法是什么?
如果你需要更具体的例子:
我有一个DT_Node
类,它是树的一个节点,我将使用构造一个树DT_Node
.
DT_Node
有一个被调用的方法addChild()
用于将子元素插入其节点向量中.
DT_Node
将在不同的cpp文件中用于构造树,这意味着另一个cpp文件将使用addChild()
方法来添加节点的子节点.
// DT_Node.hpp
class DT_Node
{
public:
DT_Node();
virtual ~DT_Node();
virtual void decide() = 0;
virtual void addChild( ??? );
private:
std::vector< std::unique_ptr<DT_Node> > mNodes;
};
Run Code Online (Sandbox Code Playgroud)
// DT_Node.cpp
DT_Node::DT_Node()
{
}
DT_Node::~DT_Node()
{
mNodes.clear();
}
void DT_Node::addChild( ??? )
{
???
}
Run Code Online (Sandbox Code Playgroud)
你需要的是:
void DT::Node::addChild(std::unique_ptr<DT_Node>&& child) {
mNodes.emplace_back(std::move(child));
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,你的头衔是误导性的.unique_ptr不是成员(它包含在成员中),并且您肯定不会初始化成员(您将在构造函数中使用成员初始化列表语法).