C++笔记

一、智能指针

  • C++的指针包括两种:原始指针(raw pointer)、智能指针
  • 智能指针是原始指针的封装,其优点是会自动分配内存,不用担心潜在的内存泄露
  • 智能指针只解决了一部分问题,即独占、共享所有权指针的释放、传输

1、独占指针:unique_ptr

特性:

在任何给定的时刻,只能有一个指针管理内存
当指针超出作用域时,内存将自动释放
该类型指针不能Copy,只能Move
独享指针创建:

#include <memory>
unique_ptr<int> UP = make_unique<int>(100);

优点:

  • 性能开销小
  • 适用于任何场景
    缺点:
  • 不能复杂
  • 独占资源

2、共享指针:shared_ptr

应用场景:

  • 多个指针指向同一个资源
  • 需要自动管理内存资源

特征:

多个共享指针可以同时指向同一个物体
当没有共享指针指向这个物体(对象)时,系统将会自动释放内存资源

创建方法:

//方式一
#include <memory>
shared_ptr<int> p;
p = make_shared<int>(100);
//方式二
shared_ptr<int> p {new int(100)};
//复杂shared_ptr,让多个共享指针指向同一个物体
shared_ptr p2 = p;
cout << *p << endl;

*p2 = 321;
cout << *p2 << endl;
  • p.use_count() 记录指向物体的共享指针个数
  • p.reset() 清除共享指针,清除后共享指针将不再指向这个物体
shared_ptr<Ball> p = make_shared<Ball>();
cout << p.use_count() << endl;
//use_count 记录有多少个共享指针指向这个物体
p.reset();

这里用到了引用计数的方法,也就是记录指向物体的共享指针个数,个数为0时自动释放内存
共享指针的优点:

  • 不需要手动释放内存资源
    缺点:
  • 会产生额外的内存和性能开销:因为shared_ptr会使用引用计数

二、STL容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值