繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM