C ++ unique_ptr通过构造函数初始化

时间:2016-02-22 17:57:01

标签: c++ constructor initialization unique-ptr

我的C ++代码有一个简单的(我想)问题。每次我通过构造函数初始化unique_ptr我都会遇到同样的问题:

  

munmap_chunk():指针无效:0x00007ffc40ba6bf0

以下是代码:

1)班级的私人部分:

template<typename T>
class Node{
  typedef std::unique_ptr<Node> ptr;
  T value;
  ptr left, right;

2)构造函数初始化ptr left和ptr right:

explicit Node(const T value, Node* left = nullptr, Node* right = nullptr):
  value{value}, left{left}, right{right} {}

这是什么问题?感谢您的澄清或指点我正确的方向。

1 个答案:

答案 0 :(得分:3)

来自您的评论示例初始化:

Node<int> node(12);
Node<int> node2(15, &node);

显然会崩溃,因为你将自动变量(node)的地址传递给unique_ptr<>,在它被销毁后会尝试delete,即使它永远不会已分配new

仅对堆上的对象使用unique_ptr<>!*

(本练习的另一个教训:总是放一个MCVE,保证包含问题,而你的代码没有。)

<子> *除非您知道自己在做什么,例如delete是否因您的类型而超载,或者您是否将适当的删除者传递给unique_ptr