【发布时间】:2019-12-11 05:57:33
【问题描述】:
据我所知,调用std::unique_ptr<T,Deleter>::release 只会转移所有权,不会释放动态内存。
来自C++ Primer 5th:
p2.release(); // WRONG: p2 won't free the memory and we've lost the pointer
auto p = p2.release(); // ok, but we must remember to delete(p)
但几页后它写道:
该库提供了
unique_ptr的一个版本,可以管理由 新的。要使用unique_ptr管理动态数组,我们必须包含一对 对象类型后的空括号:
// up points to an array of ten uninitialized ints
unique_ptr<int[]> up(new int[10]);
up.release(); // automatically uses delete[] to destroy its pointer
类型说明符 (
<int[]>) 中的括号表示 up 指向不 一个 int 但到一个 int 数组。因为 up 指向一个数组,所以当 up 销毁它管理的指针,它会自动使用delete[]。
那么std::unique_ptr<T,Deleter>::releas 对动态分配的数组的处理方式是否不同,即调用release() 后会自动释放分配的内存?如果它是真的,那么它也表明不能转移动态数组的所有权。到目前为止,我在网上找不到任何权威的参考资料。
【问题讨论】:
-
我认为这不是真的。我在 cppreference 上找不到它,也无法重现:wandbox。不调用析构函数。内存泄露。
-
发布 -> 重置错字
标签: c++ unique-ptr