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

C++ unique_ptr initialization through constructor

本文关键字:ptr 初始化 unique C++ 构造函数      更新时间:2023-10-16

我的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 左和 ptr 右:

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