一、智能指针
智能指针分类
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尺寸:和裸指针一样大,但是指定自定义删除函数会影响尺寸大小; |