建站工具也成为什么系统,模拟购物网站开发项目,网页截图快捷键是什么,电商系统网站开发shared_ptr和weak_ptr的配合使用是个问题。unique_ptr的使用场合似乎比较局限。 文章C 智能指针详解#xff08;一#xff09;——unique_ptr - 知乎 (zhihu.com)
介绍了unique_ptr的使用。它可以由shared_ptr转来#xff0c;主要用到了std::move。 主要场景其中提到#…shared_ptr和weak_ptr的配合使用是个问题。unique_ptr的使用场合似乎比较局限。 文章C 智能指针详解一——unique_ptr - 知乎 (zhihu.com)
介绍了unique_ptr的使用。它可以由shared_ptr转来主要用到了std::move。 主要场景其中提到
为动态分配内存提供异常安全RAII将动态分配内存的所有权传递给函数从函数内返回动态分配的内存工厂函数在自定义容器中保存指针在对象中保存多态子对象数据成员 值得关注。
weak_ptr的特性如下所示此部分转自https://blog.csdn.net/zhghost/article/details/110212029
1.不具有普通指针的行为没有重载operator*和-。 2.它的最大作用在于协助shared_ptr工作像旁观者那样观测资源的使用情况。 3.weak_ptr可以从一个shared_ptr或者另一个weak_ptr对象构造获得资源的观测权。 4.weak_ptr没有共享资源它的构造不会引起指针引用计数的增加。
weak_ptr的使用特点
1.使用weak_ptr的成员函数use_count()可以观测资源的引用计数 另一个成员函数expired()的功能等价于use_count()0, 但更快表示被观测的资源(也就是shared_ptr的管理的资源)已经不复存在。 2.weak_ptr可以使用一个非常重要的成员函数lock()从被观测的shared_ptr获得一个可用的shared_ptr对象 从而操作资源。 3.当expired()true的时候lock()函数将返回一个存储空指针的shared_ptr。
weak_ptr可以保存一个“弱引用”指向一个已经用shared_ptr进行管理的对象。为了访问这个对象一个weak_ptr可以通过shared_ptr的构造函数或者是weak_ptr的成员函数lock()转化为一个shared_ptr。当最后一个指向这个对象的shared_ptr退出其生命周期并且这个对象被释放之后将无法从指向这个对象的weak_ptr获得一个shared_ptr指针shared_ptr的构造函数会抛出异常而weak_ptr::lock也会返回一个空指针。【C11】新特性——weak_ptr_weak_ptr释放-CSDN博客
这里的lock比较重要。总之个人认为尽量避免用到weak_ptr这使得逻辑显得不够健壮。在复杂的系统中容易引起空指针访问问题的尴尬。
以下原理性的介绍转自C智能指针——auto_ptr、unique_ptr和shared_ptr详解_unique_ptr malloc-CSDN博客