auto_ptr的拷贝构造函数和赋值运算符实际上并没有复制存储的指针,而是将它们传输出去,使第一个auto_ptr对象变为空。 这是实现严格所有权的一种方法,因此只有一个auto_ptr对象可以在任何给定时间拥有该指针,即在需要复制语义的情况下不应使用auto_ptr。 unique_ptr std :: unique_ptr是在C ++ 11中开发的,用于...
本文是基于gcc-4.9.0的源代码进行分析,shared_ptr和weak_ptr是C++11才加入标准的,所以低版本的gcc源码是没有shared_ptr和weak_ptr的,建议选择4.9.0或更新的版本去学习,不同版本的gcc源码差异应该不小,但是原理和设计思想的一样的,下面给出源码下载地址http://ftp.gnu.org/gnu/gcc 3、智能指针概念 智能指针(S...
值得注意的一点是shared_ptr可以直接用指向对象的指针来构造,但是不推荐这样,因为如果同时声明了两个这样的shared_ptr就会造成对同一空间的重复删除。 weak_ptr 如此来看,weak_ptr就显得相对简单。它是一种本身不控制指向对象生命周期的智能指针,它指向一个由shared_ptr管理的对象,但是不会改变shared_ptr的引用计数。
C++ 智能指针shared_ptr、weak_ptr的简单实现 WeakPtr的作为弱引用指针,其实现依赖于Counter的计数器类和SharedPtr的赋值,构造,所以需要把Counter和SharedPtr也简单实现一下。 Counter对象的目地就是用来申请一个块内存来存引用计数。 Counter的实现如下: shareCount是SharedPtr的引用计数,weakCount是弱引用计数。 当...
shared_ptr允许多个指针指向同一个对象; unique_ptr则“独占”所指向的对象。 标准库还定义了一种名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象,这三种智能指针都定义在memory头文件中。 如果使用智能指针,即使程序块过早结束,智能指针也能确保在内存不再需要时将其释放。如果使用内置指针管理...
在C++ 中,weak_ptr 是一种智能指针(smart pointer),用于解决循环引用问题。它是由 shared_ptr 派生而来,但不会增加引用计数,只是对所指向对象进行观察,并不拥有对象的所有权。 循环引用问题 循环引用问题指的是在使用shared_ptr管理对象时,存在两个或多个对象相互持有shared_ptr,形成一个循环引用的情况。这种情况...
1.weak_ptr特点 2.使用weak_ptr目的 四、weak_ptr的使用 1.方法 2.使用实例 总结 前言 前几天对于智能指针写了个详细介绍,对于unique_ptr的用法也举了很多例子。 针对智能指针的定义和特点,传送门:C++智能指针——unique_ptr 但是由于unique_ptr的局限性:unique_ptr持有对象独有权这一点在实际使用中并不是很...
1. 所有权关系:shared_ptr具有共享所有权,多个shared_ptr可以共享同一块内存资源,当最后一个shared_ptr销毁时,内存资源才会被释放;而weak_ptr不具有所有权,它只是对...
创建对象时,将其中一个或多个shared_ptr指向堆上的资源。这些shared_ptr是强引用,它们增加资源的引用计数。 对于那些不需要直接拥有资源的对象,可以使用weak_ptr进行观察。weak_ptr不会增加资源的引用计数。 当使用weak_ptr访问资源时,需要通过调用lock()方法来获得一个有效的shared_ptr,该shared_ptr可以用于访问资源...
本文是基于gcc-4.9.0的源代码进行分析,shared_ptr和weak_ptr是C++11才加入标准的,所以低版本的gcc源码是没有shared_ptr和weak_ptr的,建议选择4.9.0或更新的版本去学习,不同版本的gcc源码差异应该不小,但是原理和设计思想的一样的,下面给出源码下载地址 ...