我的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} {}
这是什么问题?感谢您的澄清或指点我正确的方向。
答案 0 :(得分:3)
来自您的评论示例初始化:
Node<int> node(12);
Node<int> node2(15, &node);
显然会崩溃,因为你将自动变量(node
)的地址传递给unique_ptr<>
,在它被销毁后会尝试delete
,即使它永远不会已分配new
。
仅对堆上的对象使用unique_ptr<>
!*
(本练习的另一个教训:总是放一个MCVE,保证包含问题,而你的代码没有。)
<子>
*除非您知道自己在做什么,例如delete
是否因您的类型而超载,或者您是否将适当的删除者传递给unique_ptr
。
子>