内存泄露问题
下面是我从一本书上看的代码,大家帮看看赋值运算符重载存不存在内存泄露啊,我觉得有。
class PFArrayD
{
public:
PFArrayD(const PFArrayD &pfaObjiect);
PFArrayD &operator=(const PFArrayD& rightside);
~PFArrayD();
private:
double *a;
int capacity;
int used;
};
PFArrayD& PFArrayD::operator =(const PFArrayD& rightside)
{
if(capacity !=rightside.capacity)
{
delete [] a;
a=new double[rightside.capacity];
}
capacity =rightside.capacity;
used=rightside.used;
for(int i=0;i<used;i++)
a[i]=rightside.a[i];
return *this;
}
[解决办法]
楼主认为哪儿会泄露?
[解决办法]
在析构函数里面加上相应的delete与new配对就行了。
[解决办法]
seems no memory leak
[解决办法]
在析构中 加delete
[解决办法]
赋值运算符重载不存在内存泄露
[解决办法]
楼主是不是说a没有被delete,析构函数中应该有处理的
[解决办法]
学习
[解决办法]
- C/C++ code
if(capacity !=rightside.capacity) { delete [] a; a=new double[rightside.capacity]; } // 楼主认为if为假的时候内存泄露了?//我看不出内存泄露。
[解决办法]
在构造函中加上new,这样在赋值的时候delete [] a;就不会错了!
在析构中加上delete,这样就不会泄漏了!
[解决办法]
析构函数缺delete
[解决办法]
貌似没有
[解决办法]
- C/C++ code
PFArrayD& PFArrayD::operator =(const PFArrayD& rightside) { if(capacity !=rightside.capacity) { delete [] a; a=new double[rightside.capacity]; // 数据大小为 capacity} capacity =rightside.capacity; used=rightside.used; for(int i=0;i <used;i++) // 负值范围却为 0 ~ used,你不觉得有问题吗??a[i]=rightside.a[i]; // 你如果确保used <= capacity,那就没关系return *this; }
[解决办法]
没看出你的赋值函数有啥泄露,orz
[解决办法]
14楼说的是啊
[解决办法]
有new建立的堆空间,加DELETE就可以,因为你程序中的DELETE是在IF语句中的,如果这个IF不执行,就等于跳过了这个DELETE,所以在析构函数中加上DELETE 就可以了
[解决办法]
哦?
没看出来啊`~~~
capacity不是容易么,used只要比capacity小就行啦
rightside.used的值与this->used没关系吧
[解决办法]
网上有检查内存泄露的工具,并有说明文档,是开源代码,下载一个,以后就不怕再遇到这种问题了!