是否有一个原因unique_ptr::reset
没有重载使const deleter&
和deleter&&
与其构造函数相匹配,而这些构造函数将这些作为第二个参数?
unique_ptr
中存储的删除器将被复制分配或移动分配reset
中的参数。如果删除器是不可复制的或不可移动的,则调用reset
的相应重载将无法编译。这似乎与构造函数的行为一致。
答案 0 :(得分:26)
我考虑添加,但您可以使用移动赋值运算符获得等效功能:
ptr = unique_ptr<T, D>(new T(another_value), D(another_state));
所以我选择不对reset
说同样的事情,以保持API相当小。
<强>更新强>
我生活和学习......
语法实际上比我上面显示的要简单得多:
ptr = {new T(another_value), D(another_state)};
答案 1 :(得分:3)
因为删除器存储在构造中的对象中。由于删除器类型是模板参数,因此在构造之后无法“转换”该类以使用另一个类。