在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?
std::default_delete<>()
与unique_ptr<>
有关,但它们是不同的问题。 - user4442671