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

时间:2012-02-06 21:01:23

标签: c++ c++11 smart-pointers

是否有一个原因unique_ptr::reset没有重载使const deleter&deleter&&与其构造函数相匹配,而这些构造函数将这些作为第二个参数?

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

2 个答案:

答案 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)

因为删除器存储在构造中的对象中。由于删除器类型是模板参数,因此在构造之后无法“转换”该类以使用另一个类。