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

C++ unique_ptr initialization through constructor

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

munmap_chunk(): invalid pointer: 0x00007ffc40ba6bf0

代码如下:

1) class 的私有部分:

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

这里有什么问题?感谢您的澄清或为我指明正确的方向。

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

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

显然会崩溃,因为您将自动变量 (node) 的地址传递给 unique_ptr<>,它在销毁后会尝试 delete 它,即使它从未分配 new.

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

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

* 除非你知道你在做什么,即如果 delete 对你的类型来说是超载的,或者如果你将适当的删除器传递给 unique_ptr