c++避免内存泄漏

来源:互联网 发布:淘宝卖家联系电话 编辑:程序博客网 时间:2024/05/20 03:41

在c/c++语言对于程序内存的管理不像java语言一样有自己的垃圾回收机制,而c/c++却要程序员手动的释放用关键字new或者 malloc系统函数申请的内存空间,然而由于程序员的疏忽可能会忘记去手动释放内存,这样就导致了程序内存的泄漏。

在c/c++的程序内存分配中,自顶向下分为代码段,数据段,栈区,栈保留区,动态链接库区,堆保留区,堆区。

程序栈内存有系统管理,栈上的数据生命周期结束时系统会自动回收栈上的内存,而堆上的内存有程序员自己分配,堆上数据的生命周期结束时系统不会自动回收它的内存,而是需要程序员手动释放,这样就很容易造成内存泄漏。

介于堆与栈的区别,想要避免内存泄漏就需要用到它们的特性,当然还有关于c++析构函数的特性,在c++中,当class对象的生命周期结束时,class对象会自动调用自己的析构函数来释放类咱实例化时构造函数所申请的内存空间。

因此,如何来避免由于程序员的疏忽而导致内存泄漏就相对比较明了了,那就是将动态内存的申请放在类的构造函数中,然后在类的析构函数中手动释放构造函数申请的内存空间,最后将class对象定义在程序栈上。这样在class对象生命周期结束时,系统会自动回收栈上class对象所占的内存,同时class对象在它的生命周期结束时将会自动调用自己的析构函数来释放构造函数申请的堆内存空间,这样留可以间接地使用程序栈来管理自动分配的内存,也就间接地避免了程序运行过程中内存的泄漏。

以上只是个人的一点愚见,有什么不对的地方还请大神帮忙指出。

0 0
原创粉丝点击