嵌入式面向对象程序开发·智能指针(未整理完)

一、智能指针

智能指针分类

    auto_ptr(C++98)  C++11智能指针替代,不再使用

    unique_ptr(C++11)    独占指针

    shared_ptr(C++11)    共享指针

weak_ptr(C++11 )     弱指针

 

需使用例如g++ -std=c++11 -o a.out shared_ptr.cpp 编译

1、shared_ptr共享指针

1、作用:多个指针可以同时指向同一个对象(共享所有权,协同工作),当最后一个指针被销毁或者指向其他对象时,这个对象会被释放。

2、工作原理:引用计数增加/减少(原子操作)

  (1)引用计数增加:

      ①用一个智能指针初始化另一个智能指针;

      ②函数传参:传递一个智能指针;

      ③函数返回值:返回一个智能指针。

   (2)引用计数减少:

      ①给智能指针赋予新值,指向一个新对象;

      ②局部的智能指针离开其作用域。

3、定义:shared_ptr<指向的类型> 智能指针变量名

4、使用演示

   (1)手动初始化

      注:shared_ptr p = new int(10); //错误,

      shared_ptr是explicit,不可以进行隐式类型转换,只能直接初始化;

   (2)std::make_shared函数

      ①auto p  = std::make_shared("hello world");

      ②功能:在 堆内存中可以动态分配对象,并返回一个shared_ptr;

      ③推荐方法,因为此方法安全,高效;

5、shared_ptr常规操作

2、unique_ptr独享指针

  1、独占式指针(专属所有权),同一时刻,只能有一个unique_ptr指向这个对象;当指针销毁,指向的对象也销毁;

  2、初始化

    手动初始化:unique_ptr p;或unique p(new int(5))

    std::make_unique函数(C++14)

      注:生成的指针不支持指定删除器语法

  3、unique_ptr常规操作

  4、unique_ptr尺寸:和裸指针一样大,但是指定自定义删除函数会影响尺寸大小;

你可能感兴趣的:(嵌入式面向对象编程)