由于std::unique_ptr
提供了一种避免内存泄漏和确保异常安全的便捷方法,因此传递它们而不是原始指针是明智的。因此,一个人可能想要(成员)具有类似签名的函数
std::unique_ptr<some_type> foo(some data);
不幸的是,在实现这样的功能时,不能简单地
std::unique_ptr<some_type> foo(some data)
{
return { new some_type(data) }; // error
}
但必须改为
std::unique_ptr<some_type> foo(some data)
{
return std::move( std::unique_ptr<some_type>( new some_type(data) ) ); // awkward
}
因为构造函数unique_ptr::unique_ptr(pointer)
是explicit
. 这个构造函数背后的原因是explicit
什么?
制作构造函数的动机之一explicit
是防止意外的隐式类型转换。但是,由于unique_ptr
不能按值传递,这应该不是问题,不是吗?