在初始化 shared_ptr 智能指针时,还可以自定义所指堆内存的释放规则,这样当堆内存的引用计数为 0 时,会优先调用我们自定义的释放规则。 在某些场景中,自定义释放规则是很有必要的。比如,对于申请的动态数组来说,shared_ptr 指针默认的释放规则是不支持释放数组的,只能自定义对应的释放规则,才能正确地释放申请的堆...
std::shared_ptr<SharePtr> p2(nullptr);/*传入空指针 nullptr*/qDebug()<<"p2.count:"<<p2.use_count();/*C++11 标准中提供了 std::make_shared<T> 模板函数,其可以用于初始化 shared_ptr智能指针*/std::shared_ptr<SharePtr> share_ptr = std::make_shared<SharePtr>("123");/*查看资源的所...
cout<<"ptr1管理的内存引用计数:"<< ptr1.use_count() <<endl;//使用智能指针管理一块字符数组对应的堆内存shared_ptr<char> ptr2(newchar[10]); cout<<"ptr2管理的内存引用计数:"<< ptr2.use_count() <<endl;//创建智能指针对象,不管理任何内存shared_ptr<int>ptr3; cout<<"ptr3管理的内存引用...
由于shared_ptr是为管理单个对象而设计的,而不是数组,因此不能直接将shared_ptr用于C风格数组的RAII(资源获取即初始化)。 然而,可以使用自定义删除器(deleter)来扩展shared_ptr的功能,以便正确释放C风格数组。自定义删除器是一个函数对象,用于指定shared_ptr释放资源时的行为。 下面是一个示例代码,展示...
①用shared_ptr指针给同类的指针赋值,初始化②作为函数实参传入函数③作为函数返回值计数器递减:①指针指向了另外一种对象(可能是T的子类),也就是发生在智能指针的赋值之间②智能指针被销毁了,例如智能指针作为栈变量,出了代码块之后就被销毁了特别的:当引用计数器为0时,自动释放智能指针指向的内存空间也就是说当...
shared_ptr<string>p2=make_shared<string>(10,'9'); //p3指向一个值初始化为0的int数 shared_ptr<int>p3=make_shared<int>(); 1. 2. 3. 4. 5. 6. 7. 8. 配合auto使用:make_shared函数可以赋值给auto,这样比较简单 autop=make_shared<vector<string>>(); ...
#include <iostream> #include <memory> using namespace std; int main() { // 使用智能指针管理一块 int 型的堆内存 shared_ptr<int> ptr1(new int(520)); cout << "ptr1管理的内存引用计数: " << ptr1.use_count() << endl; // 使用智能指针管理一块字符数组对应的堆内存 shared_ptr<...
shared_ptr初始化 // 1. 分配内存并且初始化shared_ptr<Cat>p0(newCat("莉莉"));//2. c++11标准,效率更高,推荐使用shared_ptr<Cat>p1(make_shared<Cat>("tom"));//3. 用已经存在的地址初始化Cat*cat=newCat("jerry");shared_ptr<Cat>p3(cat);// 4. 用已经存在的shared_ptr p0初始化shared_ptr...
初始化shared_ptr对象 #include<iostream>#include<memory>intmain(){std::shared_ptr<int>p1(newint(1));//方式1std::shared_ptr<int>p2=p1;//方式2std::shared_ptr<int>p3;//方式3 reset,如果原有的shared_ptr不为空,会使原对象的引用计数减1p3.reset(newint(1));//方式4std::shared_ptr<int...
与unique_ptr的区别 首先最明显的区别自然是它们一个是专享对象,一个是共享对象。而正是由于共享,包括要维护引用计数等,它带来的开销相比于unique_ptr来说要大。 另外,shared_ptr无法直接处理数组,因为它使用delete来销毁对象,而对于数组,需要用delete[]。因此,需要指定删除器: ...