san*_*orn 12 c++ arrays shared-ptr c++17
使用分离的分配创建shared_ptr时,必须在C++ 14 ctor和reset成员函数中提供显式删除函数.
using std::string;
using std::shared_ptr;
using std::default_delete;
int arr_size{};
...
auto string_arr_sptr_cpp14 =
shared_ptr<string[]>(new string[arr_size], default_delete<string[]>() );
string_arr_sptr_cpp14.reset(new string[arr_size], default_delete<string[]>() );
// define an explicit deleter,
// or otherwise, "delete ptr;" will internally be used incorrectly!
Run Code Online (Sandbox Code Playgroud)
通过在C++ 17中支持数组特性的shared_ptr,ctor和reset都不再需要那些?
auto string_arr_sptr_cpp17 = shared_ptr<string[]>(new string[arr_size]);
string_arr_sptr_cpp14.reset(new string[arr_size]);
// deduced delete function calls "delete[] ptr;" correctly now?
Run Code Online (Sandbox Code Playgroud)
你是对的,shared_ptr<T[]>
现在自然可以正确处理调用delete[]
。
http://eel.is/c++draft/util.smartptr.shared#const-5
效果:当 T 不是数组类型时,构造一个拥有指针 p 的 shared_ptr 对象。否则,构造一个拥有 p 的 shared_ptr 和一个调用 delete[] p 的未指定类型的删除器。
就目前reset()
而言:
http://eel.is/c++draft/util.smartptr.shared#mod-3
等效于 shared_ptr(p).swap(*this)。
这将传输规范所需的自定义删除器。
归档时间: |
|
查看次数: |
815 次 |
最近记录: |