![](/img/trans.png)
[英]Why does unique_ptr have the deleter as a type parameter while shared_ptr doesn't?
[英]Why doesn't unique_ptr::reset have overloads that take a deleter?
有没有一个原因, unique_ptr::reset
没有带有const deleter&
和deleter&&
重载来匹配它的构造函数,这些构造函数将这些作为第二个参数?
unique_ptr
存储的删除器将被复制分配或移动分配来自reset
的参数。 如果删除器是不可复制的或不可移动的,则调用相应的reset
重载将无法编译。 这似乎与构造函数的一致行为。
我想添加它,但你可以使用移动赋值运算符获得等效的功能:
ptr = unique_ptr<T, D>(new T(another_value), D(another_state));
因此,为了保持API合理地小,我选择不对reset
说同样的事情。
更新
我生活和学习......
语法实际上可以比我上面显示的简单得多:
ptr = {new T(another_value), D(another_state)};
因为删除器存储在构造中的对象中。 由于删除器类型是模板参数,因此在构造之后无法“转换”类以使用另一个类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.