内存泄漏几种情况

几种内存泄漏的情况

1、类的构造函数和析构函数没有匹配调用new和delete

2、在释放内存前程序出现错误。

3、释放对象数组时delete没有加上[ ]

.4、指向对象的指针数组不等同于对象数组。对象数组,只需delete[]p,指向对象的指针数组,delete[]p只是释放了每个指针,但并没有释放对象的空间,正确的做法,是通过一个循环,将每个对象释放了呢,然后再把指针释放了。

5、缺少拷贝构造函数(两次释放同一个内存是一种错误的做法,同时可能会造成堆的崩溃,按值传递会调用拷贝构造函数,引用传递不会调用)

6、缺少重载赋值运算符。

7、没有将基类的析构函数定义为虚函数(当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数不会被调用,子类的资源没有正确的释放,因此造成内存泄漏。)

8、浅拷贝:如果复制的对象中引用了一个外部内容(例如分配在堆上的数据),那么在复制这个对象的时候,让新旧两个对象指向同一个外部内容,就是浅拷贝。(指针虽然复制了,但所指向的空间内容并没有复制,而是由两个对象共用,两个对象不独立,删除空间存在)  深拷贝:如果在复制这个对象的时候为新对象制作了外部对象的独立复制,就是深拷贝。

所以引入了智能指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值