【C++智能指针】

C++智能指针

概念:

所谓智能指针就是智能/自动化的管理指针所指向的动态资源的释放。它是一个类,有类似指针的功能,对*和->运算符进行了重载;
头文件:
除了auto_ptr 其他的编译时要加“-std=c++11”

常见的智能指针

auto_ptr

  1. 特点:只能有一个指针占用对象所有权;
  2. auto_ptr 原指针拷贝给其他指针后原指针失效;
  3. auto_ptr的析构函数用的时delete,而不是delete[],所以申请数组会造成内存泄漏;
  4. 在C++11标准中已经废弃auto_ptr

unique_ptr

  1. 特点:unique_ptr可以看成是auto_ptr的代替品。因为它对对象的所有权比较专一,所以叫unique;不允许拷贝和赋值操作;允许函数返回uniqur_ptr类型指针;支持对象数组;
  2. 不允许赋值但可以转让所有权move();

shared_ptr

  1. 特点:shared_ptr定义智能指针A拷贝构造产生智能指针B时,A和B公用一个对象;赋值时也一样;
  2. 实现原理:shared_ptr智能指针实现的时候,,它内部使用了引用计数的技术(A.use_count());
  3. 当普通指针p被两个shared_ptr指针同时指向,析构时会释放两次;
  4. 循环引用时会造成内存泄漏;

weak_ptr

  1. 特点:weak_ptr是为了配合shared_ptr而引入的一种智能指针来协助share_ptr工作;
  2. weak_ptr的含义为弱引用,他的构造和析构不会引起计数的增加或减少;
  3. 它可以从一个shared_ptr或另一个weak_ptr产生(赋值);
  4. 它没有重载*和->,所以不能通过它访问对象内部的成员;
  5. 可以使用它提供的lock()获得一个可用的shared_ptr对象;
  6. 帮助解决循环引用问题

实现原理总结

  1. 智能指针本质上不是指针而是一个类;
  2. 智能指针用一个类描述,这个类中有一个指针成员(一个引用计数成员);
  3. 智能指针在栈上创建;
  4. 构造函数中初始化指针成员指向对象(初始化引用计数成员的值为1);
  5. 析构函数中删除指针成员指向的对象(将引用计数的值自减,如果减到0的时候,删除指针成员指向的对象);
  6. 对* 和->运算符进行了重载;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值