![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
智能指针
c++11 智能指针,解决裸指针使用的困扰
KingOfMyHeart
会好起来的.
展开
-
使用std::make_shared去构造智能指针
class Test{public: Test(int b):a(b){} ~Test(){}private: int a;};用std::shared_ptr管理资源时,常用的两种构造方式:1.直接newint main(){ std::shared_ptr<Test> p(new Test(1)); return 0;}2.使用std::make_shared:int main(){ std::shared_ptr<原创 2021-04-30 22:18:03 · 1554 阅读 · 1 评论 -
C++智能指针unique_ptr的自定义删除器及其lambad表达式实现
问题引出:智能指针默认删除器做的事情太简单啦,仅仅调用delete释放资源可能还不够unique_ptr类://第一个参数智能指针底层资源的类型,第二个参数是删除器,就是下面struct default_delete//在删除资源时会调用删除器的operator()运算符重载,默认调用的是delete ptr.template<class _Ty,class _Dx> // = default_delete<_Ty>class unique_ptr{ //... pri原创 2020-06-28 21:35:41 · 4214 阅读 · 0 评论 -
C++多线程中访问共享对象错误场景以及使用shared_ptr和weak_ptr强弱指针设计解决方案
子线程访问被主线程delete掉的共享对象class A{public: A(int val = 100){ std::cout<<"A()"<<std::endl; ptr_ = new int; *ptr_ = val; } ~A() { std::cout<<" ~A()"<<std::endl; } void show(){ cout<<"*ptr_ = "<<*ptr_<<endl; }pr原创 2020-06-28 19:30:13 · 580 阅读 · 0 评论 -
C++智能指针之强、弱智能指针使用以及用弱智能指针解决强智能指针的循环(交叉)引用解决方法
强智能指针:资源每被强智能指针引用一次,引用计数+1,释放引用计数-1,如shared_ptr;弱智能指针:仅仅起到观察作用,观察对象释放还存在,也就是说对象的引用计数是否等于0,如weak_ptr.强智能指针的使用,带来资源的交叉引用问题:class B;class A{public: A(){ std::cout<<"A()"<<std::endl; } ~A() { std::cout<<" ~A()"<<std::e.原创 2020-06-27 21:39:11 · 1088 阅读 · 0 评论 -
C++智能指针之不带引用计数的智能指针(auto_ptr、scoped_ptr、unique_ptr),以及他们是如何解决浅拷贝问题?
auto_ptr:c++11前就存在于c++库中:int main(){ auto_ptr<int> ptr1(new int); auto_ptr<int> ptr2(ptr1); //拷贝构造ptr2,ptr1底层的裸指针会被置为nullptr,ptr1底层裸指针原来的指向赋值给了ptr2的裸指针 return 0;}1.auto_ptr拷贝构造函数:auto_ptr(auto_ptr& __a) throw() : _M_p.原创 2020-06-27 20:34:50 · 216 阅读 · 0 评论 -
C++智能指针由来与实现思想以及实现一个简单的智能指针
智能指针的由来和基本思想裸指针:int *p = new int; ,其实就是C风格的指针。裸指针的缺点:1.必须手动释放资源,手动调用delete;2.由于程序逻辑的错误return或者throw异常,导致释放资源的代码delete ptr没有被调用到;3.程序运行过程中,发生异常,导致释放资源的代码没有被调用到。智能指针 : 智能(不管程序运行发生什么意外的情况,一定会帮用户把资源释放掉),不过利用的思想正是对象出作用域,编译器会自动调用对象的析构函数,保证引用的堆空间被正确的释放。数据原创 2020-06-27 19:51:24 · 216 阅读 · 0 评论