将唯一指针初始化为类成员

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)

Mar*_*ica 8

你需要的是:

void DT::Node::addChild(std::unique_ptr<DT_Node>&& child) {
    mNodes.emplace_back(std::move(child));
}
Run Code Online (Sandbox Code Playgroud)

顺便说一下,你的头衔是误导性的.unique_ptr不是成员(它包含在成员中),并且您肯定不会初始化成员(您将在构造函数中使用成员初始化列表语法).