gpt4 book ai didi

c++ - C++中各种智能指针之间的转换规则是什么

转载 作者:IT老高 更新时间:2023-10-28 23:15:23 26 4
gpt4 key购买 nike

TR1 引入了 shared_ptr、weak_ptr、scoped_ptr 和 unique_ptr 等。

我想知道这些类型之间的各种转换/类型提升规则。

例如,将 scoped_ptr 分配给 shared_ptr 时会发生什么?这种转换是否可能/有意义?这种转换有哪些用例?

(规范中有表格吗?)

最佳答案

首先,对您的问题进行一些更正:

  • scoped_ptr 是 Boost 的一部分,不包含在 C++ TR1 或 C++0x 中(预计在 C++0x 中 unique_ptr 可以在传统使用 scoped_ptr 的地方使用)。

  • unique_ptr 不是 C++ TR1 的一部分;它是 C++0x 的一部分(因为它依赖于仅在 C++0x 中可用的右值引用和移动语义)。

回答您的问题:shared_ptrweak_ptr 齐头并进。 shared_ptr 拥有的对象也可以被 weak_ptr 引用。它们是互补的。

unique_ptr 拥有它所管理的对象的唯一所有权;没有其他人可以拥有该对象的所有权。这与 shared_ptr 的所有权语义相反:使用 unique_ptr,您拥有非共享的唯一所有权;使用 shared_ptr 您拥有共享的非唯一所有权。

您可以从 unique_ptr 构造一个 shared_ptr;当你这样做时, unique_ptr 失去对象的所有权。这是有效的,因为您始终知道给定的 unique_ptr 始终是对象的唯一所有者,因此它能够释放该所有权。

一旦一个对象由 shared_ptr 拥有,您就不能释放该对象的所有权,因为不能保证给定的 shared_ptr 是该对象的唯一所有者.

关于c++ - C++中各种智能指针之间的转换规则是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4237079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com