C++智能指针

C++ 独享智能指针 unique_ptr

unique_ptr 独享它指向的对象。也就是只有他自己同时指向同一个对象,当这个unique_ptr被销毁的时候,对象也被销毁。

包含头文件 #include <memory>

unique_ptr的模板类函数

第一个参数是指向的对象的数据类型,第二个参数是指定的删除器,一般默认是 delete;

用法

class AA {};

AA* p = new AA("xishi");

std::unique_ptr<AA> pu1(p); // 使用智能指针 pu1 管理指针 p 指向的对象

*pu1 pu1-> // 和普通指针用法一样

std::unique_ptr<AA> pu1(new AA("xishi")); // 用法二

unique_ptr 的构造函数前面加上了 explicit 关键字 说明此指针不能用于转换函数,也就是

unique_ptr<AA> pu2 = p;

unique_ptr<AA> pu3 = new AA("xishi"); // 以上都是错误的,不能把普通指针直接赋给智能指针。

他还不能使用拷贝构造函数 unique_ptr<AA> pu2 = pu1 ; // 错误

pu2 = pu1 ; // 错误 不能复制 赋值

其实就是这个智能指针只能同时一个指向对象,不然这样释放对象时其他的智能指针就内存泄漏了

std::unique_ptr<AA> pu1 = make_unique<AA> ("xishi"); // C++14标准

不要同一个裸指针初始化多个智能指针

AA* p = new AA("xishi");

std::unique_ptr<AA> pu1(p);

std::unique_ptr<AA> pu2(p); // 错误

总结 智能指针就是类 类中有一个成员 管理着裸指针

智能指针只能传引用 不能传值

其他细节

智能指针为临时变量时可以作为函数返回

使用 nullptr 给unique _ptr 赋值 将释放对象

release() 函数可以释放 unique_ptr的管理权 move() 函数可以转移 unique_ptr的管理权

reset() 函数可以释放对象

智能指针具有多态的性质

智能指针可以创建指针数组

unique_ptr<AA[]> parr2(new AA[2]);

unique_ptr<AA[]> parr2(new AA[2]{string("xishi"), string("bingbing") });

C++ 共享智能指针 shared _ptr

和上面好多都一样

但是没有删除 拷贝构造函数 和 赋值函数

三种初始化方法和上面一样:

1 shared_ptr<AA> p0(new AA("xishi"));

2 shared_ptr<AA> p0 = make_shared<AA>("xishi");

3 AA* p = new AA("xishi");

shared_ptr<AA> p0(p);

4 可以使用拷贝和赋值进行初始化

只能传引用 不能传值

智能指针删除器_哔哩哔哩_bilibili

C++ unique 函数

把相邻不重复的元素移动到数组前面

一般是先排序,再得到 数组的 begin() end() iterator

然后 unique();

前面的都是不重复的,unique() 返回的是指向第一个重复元素的迭代器。

c++ unique函数_yitahutu79的博客-CSDN博客

相关推荐
TinyPiXOS开发者联盟7 分钟前
轻量级嵌入式系统的 Lottie 动画实现
linux·c++·动画·嵌入式开发·lottie·tinypixos·tpgui
kyle~8 分钟前
C++---关键字constexpr
java·开发语言·c++
进击的圆儿21 分钟前
10个TCP可靠性与拥塞控制题目整理
网络·c++·tcp/ip
小欣加油33 分钟前
leetcode 860 柠檬水找零
c++·算法·leetcode·职场和发展·贪心算法
买辣椒用券2 小时前
在Linux上实现Modbus RTU通信:一个轻量级C++解决方案
linux·c++
小龙报2 小时前
《C语言疑难点 --- C语内存函数专题》
c语言·开发语言·c++·创业创新·学习方法·业界资讯·visual studio
卡提西亚3 小时前
C++笔记-21-运算符重载
c++·笔记
草莓熊Lotso3 小时前
C++ 继承特殊场景解析:友元、静态成员与菱形继承的底层逻辑
服务器·开发语言·c++·人工智能·经验分享·笔记·1024程序员节
利刃大大4 小时前
【动态规划:01背包】01背包详解 && 模板题 && 优化
c++·算法·动态规划·力扣·背包问题
9ilk4 小时前
【基于one-loop-per-thread的高并发服务器】--- 前置技术
运维·服务器·c++·笔记·后端·中间件