在学习 C++ 的时候遇到 上面这个问题,代码如下:
// cl 是一个类的对象指针
// table_ 成员变量 的值 类型为:std::unique_ptr<T>
auto t_heap=cl->table_;
错误原因
这是由于 std::unique_ptr 的删除构造函数导致的:
std::unique_ptr 是一个独占所有权的智能指针,它会禁用复制构造函数和复制赋值运算符,以确保资源的独占性。因此,直接将 std::unique_ptr 赋值给普通指针会导致编译错误。
解决方式
引用法
auto &t_heap = cl->table_;
原理
cl->table_返回一个 std::unique_ptr<T>
类型的对象。
auto &t_heap 使用引用类型绑定到 std::unique_ptr
对象,因此不会调用删除构造函数。
指针
auto t_heap = cl->table_.get();
原理
get() 返回 std::unique_ptr
中所持有的原始指针。
auto t_heap 使用普通指针类型,直接将原始指针赋值给普通指针变量,不会调用std::unique_ptr
删除构造函数。