当前位置: 首页 > 网络应用技术

如何了解共享_ptr和unique_ptr是否可以相互传输

时间:2023-03-08 10:25:01 网络应用技术

  C ++中最常用的智能指针是共享_ptr和unique_ptr。C ++中最常见的新手问题是我从一个函数中获取unique_ptr,但可以将其用于共享_ptr。我该如何更改它?您可以将shared_ptr转换为unique_ptr吗?

  让我们简要介绍一下shared_ptr是什么。

  此代码将在堆栈中创建一个共享_ptr对象,最基本的指针,一个对堆中创建的小部件对象的一个,一个点对参考计数,这对于许多共享_ptr的后续记录很方便,可以引用widget对象。

  指出b = a的分配语句后,内存状态如下,也就是说,每个人都维护小部件对象和参考对象。C ++ 11对C ++ OUNT没有线程安全保护。新版本的C ++已经完成了此作品。支持,这也意味着性能会下降。

  unique_ptr的实现要简单得多。他仅维护一个PTR指针,可以将对象指向其内部操作中的堆,并且不支持分配和其他操作。它仅支持移动语义。

  然后,让我们看一下相互转换的问题:

  问:unique_ptr转换为shared_ptr?

  由于unique_ptr的语义是所有权的唯一所有者,只要您执行移动操作,您就可以将所有权转移到shared_ptr

  这样,A等于NULLPTR,B指向堆中的小部件对象并切割计数= 1。

  问:shared_ptr转换为unique_ptr?

  由于Shared_ptr本质上是许多人拥有所有权,因此如果唯一的_ptr C需要同时删除A和B的窗口小部件方向,则很难做到这一点,因此不可能执行此操作,因此标准不支持共享_ptr来转换为unique_ptr。

  要在一句话中总结这一原则,可以将严格的所有权条件转换为松散条件。

  原始:https://juejin.cn/post/709651488888800148488