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

论坛 期权论坛 脚本     
匿名技术用户   2021-1-7 09:42   46   0

一、智能指针

智能指针分类

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<int> p = new int(10); //错误,

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

(2)std::make_shared函数

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

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

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

5、shared_ptr常规操作

2、unique_ptr独享指针

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

2、初始化

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

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

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

3、unique_ptr常规操作

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP