目的
- 多个智能指针共同管理同一块内存
- 其核心是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存
表示方式
- 共享智能指针的初始化
a. 共享智能指针构造函数
b. 移动构造和拷贝构造函数shared<类型> 智能指针名(内存) int *ptr = new int(500); shared_ptr<int> ptr1(ptr);//指向int型内存,shared<类型> 智能指针名(内存) shared_ptr<char> ptr2(new char[20]);//使用智能指针管理一块字符数组对应的堆内存 shared_ptr<int> ptr3;//创建智能指针,但不初始化任何内存 shared_ptr<int> ptr4(nullptr);/创建智能指针,初始化为空
c. make_shared函数//移动构造 shared_ptr<int> move_ptr = move(ptr1); //拷贝构造 shared_ptr<int> copy_ptr = move_ptr;
d. reset()初始化//make_shared<类型>(数值) shared_ptr<int> makeshare_ptr = make_shared<int>(10);
class_ptr1.reset();//无参数表示只删除,不重定义初始化 class_ptr2.reset(new Test("szy"));//先删除,再重定义初始化
- 共享智能指针的使用方法
a. 共享智能智能指针的引用计数
.use_count():查看当前共享智能指针的引用计数shared_ptr<int> ptr1(ptr); cout << "ptr1的值:" << *ptr1 << ",ptr1管理的内存引用计数:" << ptr1.use_count() << endl