自从C++17支持数组的shared_ptr,这是否意味着在构造函数和重置函数中不再需要显式删除器来处理T[]?

14

在C++14中如果使用单独的分配方式(separated allocation)创建shared_ptr,必须在构造函数和reset成员函数中提供显式的delete函数。

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!

通过在C++17中支持shared_ptr数组功能,那么在构造函数和重置函数中就不再需要它们了吗?

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?
1个回答

5

这是否意味着 std::default_delete<>() 的主要作用也消失了? - sandthorn
1
std::default_delete<>()unique_ptr<>有关,但它们是不同的问题。 - user4442671

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接