Khi tạo shared_ptr bằng cách sử dụng phân bổ riêng biệt, một hàm xóa rõ ràng phải được cung cấp trong hàm C++ 14 và đặt lại hàm thành viên.Vì C++ 17 hỗ trợ shared_ptr của mảng, điều này có nghĩa là một deleter rõ ràng cho T [] không còn cần thiết trong cả ctor và 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!
Bằng cách hỗ trợ shared_ptr tính năng mảng trong C++ 17, các cài đặt này sẽ không còn cần thiết trong cả ctor và đặt lại?
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?
Điều này có nghĩa rằng vai trò chính của std :: default_delete <>() cũng biến mất? – sandthorn
'std :: default_delete <>()' có liên quan đến 'unique_ptr <>', đó là một vấn đề khác. – Frank