unique_ptr:独占对象的所有权,由于没有引用计数,性能较好于shared_ptr。 weak_ptr:该智能指针通常用来配合shared_ptr,解决循环引用的问题。 shared_ptr 内存模型图 shared_ptr是一个模板类。 shared_ptr内部有两个指针,一个ptr指向对象,一个ptr指向控制块。控制块里面包含着引用计数(reference count,或者叫use_count...
#include<memory>intmain(){// 创建一个unique_ptr,指向一个动态分配的int对象std::unique_ptr<int>ptr(newint(42));// 使用指针操作符和解引用操作符访问所指向对象的值std::cout<<*ptr<<std::endl;// 输出: 42// 通过移动构造函数将所有权转移给另一个unique_ptrstd::unique_ptr<int>ptr2=std::m...
"<<std::endl;std::unique_ptr<AA>p0(newAA("西施0"));// 方法一: 分配内存并初始化std::unique_ptr<AA>p1=std::make_unique<AA>("冰冰1");// 方法二: C++14标准。std::cout<<"智能指针调用p1->m_name: "<<p1->m_name<<std::endl;// 2)用nullptr给unique_ptr赋值将释放对象,空的unique...
是为了配合 shared_ptr 而引入的一种智能指针,它指向由 shared_ptr 管理的对象,但不影响对象的生命周期。通过 weak_ptr,我们可以解决 shared_ptr 的循环引用问题,避免内存泄漏。 通过shared_ptr 来创建,但不增加引用计数。当需要访问 weak_ptr 指向的对象时,可以通过 lock() 方法转换为 shared_ptr,如果转换成功,...
20240430 在 (一)我们研究了unique_ptr, 它可以用来指向一个原生指针,这样就不用操心原生指针所指资源的释放问题了。但,有的时候需要多个地方使用、保存一个指针所绑定的资源,这时只有一个unique_ptr就不够用了…
C++中的shared_ptr、unique_ptr和weak_ptr。这些都是智能指针,旨在帮助开发者管理动态分配的内存,并自动处理对象的生命周期,以减少内存泄漏和其他相关问题。 1. shared_ptr shared_ptr是一个引用计数的智能指针…
c++智能指针的使用 官方参考 普通指针的烦恼:内存泄漏,多次释放,提前释放 智能指针 负责自动释放所指向的对象。 三种智能指针 shared_ptr,unique_ptr,weak_ptr; 将shared_ptr存放在一个容器中,不再需要它的时候,要erase掉。 allocator负责封装堆内
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
C++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被11弃用。 为什么要使用智能指针 智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类...
智能指针是C++中用于自动管理内存的工具,它们通过模拟拥有所有权的对象来防止内存泄漏,其中unique_ptr和shared_ptr是最常用的两种类型。本文将深入探讨这两种智能指针的工作原理、应用场景、常见问题、易错点及避免策略,并通过具体代码示例加以说明。