是否有原因unique_ptr::reset
没有超过一个const deleter&
和deleter&&
以匹配其构造函数,将它们作为第二个参数?为什么unique_ptr :: reset没有带删除器的重载?
unique_ptr
中存储的删除者将被复制分配或移动分配参数reset
。如果删除器不可复制或不可移动,则调用reset
的相应超载将不会编译。这似乎是与构造函数一致的行为。
是否有原因unique_ptr::reset
没有超过一个const deleter&
和deleter&&
以匹配其构造函数,将它们作为第二个参数?为什么unique_ptr :: reset没有带删除器的重载?
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)};
+1对于“为什么”问题拥有唯一的_权威答案。 – ildjarn 2012-02-06 21:25:44
如果有重置功能,它不会更干净和更符合shared_ptr吗?对我来说,当你有一个自定义删除功能时,感觉特别清晰。例如:'ptr = unique_ptr(new_raw_ptr,deleter_function);'vs'ptr.reset(new_raw_ptr,deleter_function);'。或者如果我们可以保持相同的deleter_function,那么它会更好,所以它会像:'ptr.reset(new_raw_ptr);'。 –
felipou
2014-09-19 09:09:46
@felipou:后者有效。对于前者,你可以如何实现它:http://cplusplus.github.io/LWG/lwg-active.html#submit_issue – 2014-09-19 14:35:23