std::shared_ptr<int> sPtr(new int(5)); std::weak_ptr<int> wPtr = sPtr; //weak_ptr不会改变shared_ptr,但是会和shared_ptr的引用保持一致 std::shared_ptr<int> sPtr2 = wPtr.lock(); //wPtr.lock()后会改变shared_ptr的引用计数(+1)...
与shared_ptr不同,没有类似make_shared的标准库函数返回一个unique_ptr。当我们定义一个unique_ptr时,需要将其绑定到一个new返回的指针上。类似shared_ptr,初始化unique_ptr必须采用直接初始化形式: unique_ptr<double> p1; // 可以指向一个double的unique_ptr unique_ptr<int> p2(new int(42)); // p2指向...
3.shared_ptr 为了解决auto_ptr以及unique_ptr的局限性,C++又推出了shared_ptr。 shared_ptr使用一个引用计数器,类似java中对象垃圾的定位方法,如果有一个指针引用某块内存,则引用计数+1,释放计数-1.如果引用计数为0,则说明这块内存可以释放了。 模型如下: 引用计数让我们的可以有多个指针拥有使用权,但是这种方式...
理解基于引用计数法的智能指针实现方式,了解所有权转移的概念,理解shared_ptr和unique_ptr的区别和适用场景 考虑用std::shared_ptr管理动态分配的对象。 指针能带来弹性,但不要误用,它的弹性指一方面它能在运行时改变指向,可以用来做多态,另一方面对于不能固定大小的数组可以动态伸缩,但很多时候,我们对固定大小的array,...
手写shared_ptr, weak_ptr, unique_ptr - 知乎 (zhihu.com) get()函数,表示返回当前存储的指针 use_count()函数,表示当前引用计数 reset()函数,表示重置当前存储的指针 *operator,表示返回对存储指针指向的对象的引用。它相当于:* get()。 operator->,表示返回指向存储指针所指向的对象的指针,以便访问其中一个...
1、auto_ptr (无论什么情况下都不要使用,C++98标准,到了C++11标注引入了shared_ptr,unique_ptr,,weak_ptr) 2、shared_ptr shared_ptr和auto_ptr最大的区别就是,shared_ptr解决了指针间共享对象所有权的问题,也就是auto_ptr中的赋值的奇怪问题。所以满足了容器的要求,可以用于容器中。而auto_ptr显然禁止共享对...
unique_ptr:c++11版本,独占对所指对象的独有权,不允许其他的智能指针共享其内部的指针,禁止进行拷贝构造和拷贝赋值的操作,但是unique_ptr允许通过函数返回给其他的unique_ptr,还可以通过std::move来把所有权转让到其他的unique_ptr,注意,这时它本身就不再拥有原来指针的所有权了。将一个 unique_ptr 赋值给另一个时...
定义对象的时候使用shared_ptr,引用对象的时候使用weak_ptr。 unique_ptr unique_ptr是独占型的强智能指针。独占型就是不允许多个智能指针指向同一块内存空间,也不支持拷贝,复制。 Auto_ptr 已经停用 不要再使用,容易出bug22.#include 编译器直接从系统类库目录里查找头文件,如果类库目录下查找失败,编译器会终止查找...
shared_ptr , 共享式指针管理类。内部有一个引用计数,每当有一个新的shared_ptr指针指向同一个被管理的内存资源的时候,计数器会加一,当计数器为0的时候,这个内存资源会被释放。 unique_ptr,独占式指针管理类,某个时刻只能有一个unique_ptr指向一个给定对象。 当unique_ptr指针所指向的对象被销毁/重置的时候,这个...
在C语言中,内存管理相对较为直接和底层。程序员需要手动分配(如使用malloc)和释放(如使用free)内存,这要求程序员对内存管理有深入的理解,否则可能导致内存泄漏或野指针等问题。C++虽然也支持手动内存管理,但更推荐使用智能指针(如std::unique_ptr、std::shared_ptr)和容器类(如std::vector、std::list)等...