为什么unique_ptr :: reset没有带删除的重载?

Dav*_*vid 16 c++ smart-pointers c++11

是否有一个原因unique_ptr::reset没有重载采用a const deleter&deleter&&匹配其构造函数,将其作为第二个参数?

存储的删除器unique_ptr将被复制分配或移动分配参数来自reset.如果删除器是不可复制的或不可移动的,则调用相应的重载reset将无法编译.这似乎与构造函数的一致行为.

How*_*ant 26

我想添加它,但你可以使用移动赋值运算符获得等效的功能:

ptr = unique_ptr<T, D>(new T(another_value), D(another_state));
Run Code Online (Sandbox Code Playgroud)

因此reset,为了保持API合理地小,我选择不说同样的事情.

更新

我生活和学习......

语法实际上可以比我上面显示的简单得多:

ptr = {new T(another_value), D(another_state)};
Run Code Online (Sandbox Code Playgroud)

  • +1对于'为什么'的问题只有_authoritative_答案. (4认同)