项目实训(11)指针,智能指针,pcl的智能指针

一、序言

在开发过程中,见识到了cpp的指针的杀伤性,吃了不少苦头。

想要从根本上解决这个问题,需要透彻地理解指针。

二、基本知识:

在计算机中,数据是存放在内存单元中的,一般把内存中的一个字节称为一个内存单元。为了更方便地访问这些内存单元,可预先给内存中的所有内存单元进行地址编号,根据地址编号,可准确找到其对应的内存单元。由于每一个地址编号均对应一个内存单元,因此可以形象地说一个地址编号就指向一个内存单元。C 语言中把地址形象地称作指针。

指针就是地址。而可以保存指针的变量被称为指针变量(*声明)。而&是取地址操作,读取了变量的地址。


(规则等基本知识略……)

特别需要注意的是,指针不能没有合法的指向,必须要对应一块指定的内存空间,随机指向的"野指针"可能会指向我们有用的内存,导致系统崩坏。十分危险。

而这也是cpp编程中常见的错误。

另外,指针的设置也会导致另一个问题,Memory Leak,即内存泄露:

1、内存分配未成功,却使用了它

2、内存分配虽然成功,但是尚未初始化就引用它

3、内存分配成功并且已经初始化,但操作越过了内存的边界

4、忘记了释放内存,造成内存泄露

三、智能指针:

为了避免上边我们所讨论的问题的出现,cpp中设计了一种被称为智能指针的指针。

在我们的所分配的动态内存过期之后,析构函数自己删除所指向的内存,这就是智能指针的原理。

在c++98和11中,分别提供了auto_ptr和unique_ptr,shared_ptr以及weak_ptr。

其中,auto是98的,已经被unique所取代。

我们这里重点学习了后者unique和shared。

但是auto是基本的,也应该看一下。

分类

  1. std::unique_ptr<T> :独占资源所有权的指针。
  2. std::shared_ptr<T> :共享资源所有权的指针。
  3. std::weak_ptr<T> :共享资源的观察者,需要和 std::shared_ptr 一起使用,不影响资源的生命周期。

unique

所谓的独占资源所有权,就是独占资源时,可以利用此指针进行管理。

当离开此对象的作用域时,会自动释放资源。

使用时比较简单。

不需要delete。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值