在初始化 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指针给同类的指针赋值,初始化②作为函数实参传入函数③作为函数返回值计数器递减:①指针指向了另外一种对象(可能是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>>(); ...
1.shared_ptr 的初始化 我们知道共享指针shared_ptr是一个模板类,可以使用多个智能指针同时去管理一块有效的内存,进行初始化常用的三种方式:通过构造函数、std::make_shared 辅助函数以及 reset 方法。共享智能指针对象初始化完毕之后就指向了要管理的那块堆内存,如果想要查看当前有多少个智能指针同时管理着这块内存可以...
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...
voidprocess(shared_ptr<int>ptr){...}shared_ptr<int>p(newint(42));//初始化一个智能指针对象pprocess(p); //p所指的对象引用计数加1//process函数调用之后,p所指的引用计数减1int i=*p; //正确 函数参数使用时与new的关系: 因为shared_ptr类会在生存周期结束之后,将引用计数减1,当引用计数为0时,...
快手一面面试题:请介绍C++ 中shared_ptr的原理?shared_ptr线程安全吗? 02:36 米哈游一面面试题:用过哪些C++日志框架?都有什么优缺点? 02:55 字节一面STL面试题:C++中list的使用场景? 02:17 米哈游一面面试题:C++多线程开发需要注意些什么?线程同步有哪些手段? 05:58 keep一面面试题:C++中define...
初始化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...