Hin*_*sum 79 c++ shared-ptr unique-ptr c++11
难道C++ 11标准库提供任何实用程序从一个转换std::shared_ptr
到std::unique_ptr
,或反之亦然?这是安全的操作吗?
che*_*989 132
std::unique_ptr
是C++ 11表达独家所有权的方式,但其最吸引人的特点之一是它可以轻松高效地转换为std::shared_ptr
.这是为什么
std::unique_ptr
非常适合作为工厂函数返回类型的关键部分.工厂函数无法知道调用者是否希望对他们返回的对象使用独占所有权语义,或者共享所有权(即std::shared_ptr
)是否更合适.通过返回astd::unique_ptr
,工厂为呼叫者提供了最有效的智能指针,但它们并不妨碍呼叫者用更灵活的兄弟代替它.
std::shared_ptr
到std::unique_ptr
是不允许的.一旦您将资源的生命周期管理转变为astd::shared_ptr
,就不会改变主意.即使引用计数为1,也不能回收资源的所有权,以便std::unique_ptr
管理它.参考:有效的现代C++.42提高您使用C++ 11和C++ 14的具体方法.斯科特迈耶斯.
简而言之,您可以轻松高效地转换std::unique_ptr
为std::shared_ptr
但无法转换std::shared_ptr
为std::unique_ptr
.
例如:
std::unique_ptr<std::string> unique = std::make_unique<std::string>("test");
std::shared_ptr<std::string> shared = std::move(unique);
Run Code Online (Sandbox Code Playgroud)
要么:
std::shared_ptr<std::string> shared = std::make_unique<std::string>("test");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
46684 次 |
最近记录: |