gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:18:13 29 4
gpt4 key购买 nike

我正在研究一个 vector 为 unique pointers 的树结构作为类(class)成员。在处理它时,我意识到如果唯一指针将拥有的对象作为参数出现,我不确定如何将唯一指针初始化为类成员。

所以,我只是问:如果将拥有的对象作为参数出现,我应该如何将唯一指针初始化为类成员?

我应该使用新的(addTheObject(new Object()))然后使用std::make_unique吗? ?我是否应该将对象作为 unique_ptr ( addTheObject(std::unique_ptr<Object>& theObject) ) 传递并使用 std::move(theObject)

处理这个问题的正确方法是什么?

如果您需要更具体的示例:

我有一个 DT_Node类,它是树的一个节点,我将使用 DT_Node 构造一棵树.

DT_Node有一个方法叫做 addChild()用于将 child 插入其节点 vector 。

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;
};

// DT_Node.cpp
DT_Node::DT_Node()
{

}

DT_Node::~DT_Node()
{
mNodes.clear();
}

void DT_Node::addChild( ??? )
{
???
}

最佳答案

你需要的是:

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

顺便说一下,您的标题具有误导性。 unique_ptr 不是成员(它包含在成员中),并且您绝对不是在初始化成员(为此您将在构造函数中使用成员初始化列表语法)。

关于c++ - 将唯一指针初始化为类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49094700/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com