C++内存问题以及解决办法和shared_ptr基本原理实现

C++中的内存管理容易出现缓冲区溢出、空悬指针、重复释放、内存泄漏和不配对的new/delete等问题。通过使用智能指针,如shared_ptr,可以有效解决这些问题。shared_ptr持有一个引用计数,多个shared_ptr指向同一对象时,计数增加;当最后一个shared_ptr销毁时,对象会被自动释放,防止内存泄漏。文章还探讨了shared_ptr的基本原理,并提供了简单的实现代码。
摘要由CSDN通过智能技术生成

    C++这门复杂而灵活的语言不同于其他很多语言诸如Java,需要编程者通过new/delete来动态管理内存,这一不留神就容易造成内存泄漏,严重影响程序的健壮性。

C++可能的内存问题:
1.缓冲区溢出(buffer overrun)
2.空悬指针/野指针
3.重复释放(double delete)
4.内存泄漏(memory leak)
5.不配对的new[]/delete
6.内存碎片(memory fragmentation)

正确使用智能指针可以轻易解决前面的5个问题


1.缓冲区溢出:用std::vector<char> / std::string 或自己编写Buffer class来管理缓冲区,自动记住用缓冲区的长度,并通过成员函数而不是裸指
针来修改缓冲区。

2.空悬指针/野指针:用shared_ptr/weak_ptr

3.重复释放:用scoped_ptr,只在对象析构的时候释放一次。

4.内存泄漏:用scoped_ptr,对象析构的时候自动释放内存。

5.不配对的new[]/delete:把new[]统统替换为std::vector/scoped_array。

 

    shared_ptr作为一种智能指针,原理很简单,它的作用跟指针一样,不过shared_ptr保存了一个引用计数,记录了有多少个shared_ptr共同指向同一对象。每当有新的shared_ptr指向该对象时计数加一,如果指向对象的shared_ptr销毁时计数减一,一旦对象的引用计数变成0,这个对象自动被销毁,这样对内存泄漏的控制很有帮助。

下面是shared_ptr的简单实现,通过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值