unique_ptr 成员的向量
Vector of unique_ptr member
我有以下内容:
typedef std::vector<std::unique_ptr<Node>> NodeList;
class Node
{
public:
Node();
Node(NodeType _type);
virtual ~Node();
NodeType getNodeType() const;
Node const* getParentNode() const;
// I want a member function to allow acces to the
// childNodes vector
bool hasChildNodes() const;
void setParent(Node* node);
void appendChild(std::unique_ptr<Node> node);
protected:
NodeType _nodeType;
Node* parentNode;
NodeList childNodes;
};
我希望 class 的用户能够访问子节点(读取或读写)。
我怎样才能做到这一点?
编辑
我试过:
节点列表& getChildNodes();
我得到:
/usr/include/c++/4.8.3/bits/stl_construct.h:75: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Node; _Dp = std::default_delete<Node>]'
{ ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
^
如果你被锁定在unique_ptr的向量中,并且想在class之外修改它们,
NodeList& getChildNodes() {return childNodes;}
const NodeList& getChildNodes() const {return childNodes;}
您不能 return unique_ptr,因为那样会将其移出向量,留下 nullptr。
您尝试的是正确的,但我猜您是这样做的:
// This will not work and will try to copy the list
NodeList list = node.getChildNodes();
相反,这应该有效:
NodeList& list = node.getChildNodes();
我有以下内容:
typedef std::vector<std::unique_ptr<Node>> NodeList;
class Node
{
public:
Node();
Node(NodeType _type);
virtual ~Node();
NodeType getNodeType() const;
Node const* getParentNode() const;
// I want a member function to allow acces to the
// childNodes vector
bool hasChildNodes() const;
void setParent(Node* node);
void appendChild(std::unique_ptr<Node> node);
protected:
NodeType _nodeType;
Node* parentNode;
NodeList childNodes;
};
我希望 class 的用户能够访问子节点(读取或读写)。 我怎样才能做到这一点?
编辑
我试过: 节点列表& getChildNodes();
我得到:
/usr/include/c++/4.8.3/bits/stl_construct.h:75: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Node; _Dp = std::default_delete<Node>]'
{ ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
^
如果你被锁定在unique_ptr的向量中,并且想在class之外修改它们,
NodeList& getChildNodes() {return childNodes;}
const NodeList& getChildNodes() const {return childNodes;}
您不能 return unique_ptr,因为那样会将其移出向量,留下 nullptr。
您尝试的是正确的,但我猜您是这样做的:
// This will not work and will try to copy the list
NodeList list = node.getChildNodes();
相反,这应该有效:
NodeList& list = node.getChildNodes();