gpt4 book ai didi

c++ - 由于C++17支持数组的shared_ptr,这是否意味着ctor和reset中不再需要T[]的显式删除器?

转载 作者:行者123 更新时间:2023-12-02 02:43:05 26 4
gpt4 key购买 nike

当使用分离分配创建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!

通过在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?

最佳答案

你是对的,shared_ptr<T[]>现在可以自然地处理调用 delete[]正确地。

http://eel.is/c++draft/util.smartptr.shared#const-5

Effects: When T is not an array type, constructs a shared_­ptr object that owns the pointer p. Otherwise, constructs a shared_­ptr that owns p and a deleter of an unspecified type that calls delete[] p.

reset()如下:

http://eel.is/c++draft/util.smartptr.shared#mod-3

Equivalent to shared_­ptr(p).swap(*this).

这将传输规范所需的自定义删除器。

关于c++ - 由于C++17支持数组的shared_ptr,这是否意味着ctor和reset中不再需要T[]的显式删除器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45475022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com