通过构造函数C++ unique_ptr初始化
C++ unique_ptr initialization through constructor
我的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
。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- 同时具有"聚合初始化"和"模板推导"
- 初始化具有非默认构造函数的std::数组项的更好方法
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在malloc()之后初始化结构中对ptr的引用
- 唯一ptr初始化断言失败
- 使用boost lambda构造创建初始化的智能ptr的容器
- "int* ptr = int()"值初始化如何不违法?