shared_ptrを分割割り当てで作成する場合は、明示的な削除機能をC++ 14 ctorおよびresetメンバ関数で提供する必要があります。C++ 17はarrayのshared_ptrをサポートしているので、これはctorとresetの両方でT []の明示的なdeleterが不要になったことを意味しますか?
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をサポートすることで、ctorとリセットの両方でこれらの機能は不要になりますか?
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 <>()の主要な役割もなくなったことを意味しますか? – sandthorn
'std :: default_delete <>()'は 'unique_ptr <>'に関連しています。これは別の問題です。 – Frank