C++_内存管理及智能指针
文章平均质量分 56
C++_内存管理及智能指针
HelloBugs88
这个作者很懒,什么都没留下…
展开
-
<九>指针和引用
• 尽可能避免以原始指针(T*)或引用(T&)来传递所有权(使用智能指针传递所有权)。• 辨析指针、引用所指向对象的存储位置、生命周期、以及是否拥有对象所有权。原创 2023-11-20 11:20:15 · 46 阅读 · 1 评论 -
<八>裸指针万恶之源
• 分配与删除错误匹配—— new和free搭配,malloc和delete搭配,new和。• 悬浮指针—— 使用已释放内存(读取、或写入)、返回栈对象地址。• 删除非堆对象指针——对栈对象、全局/静态对象地址进行删除。• 对象类型不清晰(栈对象、堆对象、数组对象、资源句柄?delete搭配,new[]和delete[] 搭配。• 重复删除—— 对已经删除过的对象,进行二次删除。• 内存泄漏——忘记delete之前new的内存。• 使用失效引用(悬浮引用,悬浮指针)• 所有权不清晰(谁分配,谁释放?原创 2023-11-20 10:56:48 · 46 阅读 · 1 评论 -
<七>智能指针之__强弱指针使用场景之 多线程访问共享对象问题
weak_ptr是对对象的一种弱引用,它不会增加对象的use_count,weak_ptr和shared_ptr可以相互转化,shared_ptr可以直接赋值给weak_ptr,weak_ptr也可以通过调用lock函数来获得shared_ptr。即使有weak_ptr指向对象,对象也还是会被释放。weak_ptr并没有重载operator->和operator *操作符,因此不可直接通过weak_ptr使用对象,典型的用法是调用其lock函数来获得shared_ptr示例,进而访问原始对象。原创 2023-05-31 08:30:00 · 88 阅读 · 1 评论 -
<六>内存分配&智能指针内存泄漏问题
【代码】<六>内存分配&智能指针内存泄漏问题。原创 2023-05-30 10:52:56 · 170 阅读 · 1 评论 -
<五>智能指针之__自定义删除器
但是这种方式也只能处理new出来的空间因为new要和析构中的delete匹配,为了使能和fopen的管理空间匹配,我们需要定制删除器。unique_ptr的成员函数在上面的博客中几乎全部涵盖,其实还有一个知识点,即std::unique_ptr::get_deleter字面已经很明显了,就获得deleter。加入lambda表达式和function,避免多个删除器类的定义,否则每自定义一个删除器,都要去写一个对应的类,太麻烦。通过自定义删除器,可以实现一些场景下的资源释放和删除.原创 2023-05-25 21:18:53 · 354 阅读 · 1 评论 -
<四>智能指针之__最佳实践
【代码】<六>智能指针之__最佳实践。原创 2023-05-23 21:11:39 · 64 阅读 · 0 评论 -
<三>智能指针之__sharePtr
所以这个对象B 引用计数是2,当ptrb退出main函数栈 ,计数减1,计数还剩1,所以B对象没有被销毁。所以这个对象A 引用计数也是2,当ptra退出main函数栈 ,计数减1,计数还剩1,A对象没有被销毁。第一步 ptrb 先销毁,从上图中可以看到除了自己指向了对象B, 堆上还有一个指针指向了这个B。第二步:ptra销毁,ptra销毁的时候发现除了自己指向对象A,还有个堆对象指向了对象A,**怎么解决上述三段代码的问题?原创 2023-05-22 22:31:17 · 870 阅读 · 1 评论 -
<二>智能指针之__unique_ptr
C++智能指针unique_ptr原创 2023-05-21 16:27:09 · 64 阅读 · 1 评论 -
<一>智能指针之__智能指针基础
weak_ptr是对对象的一种弱引用,它不会增加对象的use_count,weak_ptr和shared_ptr可以相互转化,shared_ptr可以直接赋值给weak_ptr,weak_ptr也可以通过调用lock函数来获得shared_ptr。weak_ptr并没有重载operator->和operator *操作符,因此不可直接通过weak_ptr使用对象,典型的用法是调用其lock函数来获得shared_ptr示例,进而访问原始对象。2:带引用计数的智能指针(share_ptr,weak_ptr)原创 2023-05-19 17:40:24 · 102 阅读 · 2 评论