std::unique_ptr是C11表示独占所有权的方式,但它最吸引人的特性之一是它可以轻松有效地转换为std::shared_ptr。 这就是为什么std::unique_ptr非常适合作为工厂函数返回类型的关键部分。通过返回一个std::unique_ptr,工厂为调用者提供了最有效的智能指针,但它们并不妨碍调用者将其替换为更灵活的同级。 std::shared_ptr到std::unique_ptr是不允许的。一旦你把资源的生命周期管理交给了std::shared_ptr,你就不会改变主意了。即使引用计数是1,你也不能收回资源的所有权,比如说,让std::unique_ptr来管理它。 参考:Effective Modern C. 42 Specific WAYS TO IMPROVE YOUR USE OF C11 AND C14. Scott Meyers. 简而言之,您可以轻松高效地将std::unique_ptr转换为std::shared_ptr,但无法将std::shared_ptr转换为std::unique_ptr。 例如:
4条答案
按热度按时间rqqzpn5f1#
std::unique_ptr
是C11表示独占所有权的方式,但它最吸引人的特性之一是它可以轻松有效地转换为std::shared_ptr
。这就是为什么
std::unique_ptr
非常适合作为工厂函数返回类型的关键部分。通过返回一个std::unique_ptr
,工厂为调用者提供了最有效的智能指针,但它们并不妨碍调用者将其替换为更灵活的同级。std::shared_ptr
到std::unique_ptr
是不允许的。一旦你把资源的生命周期管理交给了std::shared_ptr
,你就不会改变主意了。即使引用计数是1,你也不能收回资源的所有权,比如说,让std::unique_ptr
来管理它。参考:Effective Modern C. 42 Specific WAYS TO IMPROVE YOUR USE OF C11 AND C14. Scott Meyers.
简而言之,您可以轻松高效地将
std::unique_ptr
转换为std::shared_ptr
,但无法将std::shared_ptr
转换为std::unique_ptr
。例如:
或:
qhhrdooz2#
我宁愿这样做。
ni65a41a3#
我觉得这个问题和答案非常有用。
我一直在寻找
std::unique_ptr
的合理用法。现在我知道了,它非常适合作为工厂返回类型。
多谢了!
mdfafbf14#
给定unique_ptr u_ptr,创建共享_ptr s_ptr:
走另一条路是不切实际的。