C++多线程Linux多线程服务端编程使用muduo C++网络库:用shared_ptr解决并发编程中的内存问题

本文介绍了C++中使用shared_ptr解决并发编程中的内存问题,包括避免空悬指针、内存泄漏和线程安全问题。讨论了shared_ptr的线程安全特性,传递shared_ptr的策略,以及如何处理析构动作和避免循环引用。还提到了通过继承enable_shared_from_this来获取shared_ptr的技巧。
摘要由CSDN通过智能技术生成

C++里可能出现的内存问题:

  1. 缓冲区溢出 : 用 vector 或 string 管理缓冲区,并通过成员函数而不是裸指针修改缓冲区
  2. 空悬指针/野指针:用 shar_ptr / weak_ptr
  3. 重复释放:用 scoped_ptr,只在对象析构的时候释放一次
  4. 内存泄漏:用 scoped_ptr,对象析构的时候自动释放内存
  5. 不配对的new[]/delete:把 new[] 通通换为 vector / scoped_array
  6. 内存碎片
shared_ptr用法小结
  1. 意外延长对象的生命周期
    使用 bind 绑定了一个 share_ptr指向的一个函数或成员函数

  2. 线程安全问题

  • 不同的shared_ptr即使绑定了相同的对象也是线程安全的
  • 对同一shared_ptr任何操作线程不安全
  1. 传递shared_ptr对象的技巧
    shared_ptr< T >p;
  • 若直接传递 f ( p ) ,由于线程安全问题,传递之前要加锁,但由于是同步调用过程,加锁后要等调用函数执行完再解锁,这样的效率太低
  • 可以先加锁对 shared_ptr 拷贝后解锁,传递拷贝后的值,利用const &接收,减少一次拷贝(因为shared_ptr的拷贝需要改变引用计数,导致拷贝的代价要比普通指针高,所以尽量不拷贝)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值