由返回值为引用而造成的内存泄露
来源:互联网 发布:mac怎么关闭隐藏文件 编辑:程序博客网 时间:2024/06/04 17:50
一个很纠结的问题:
比如两个对象进行操作,比如两个矩阵相乘,在函数中,我们会new一个新的矩阵,并作为引用返回。
如果A = B * C在一个循环里面,那么不停地构造乘积矩阵,最后造成了内存的泄露。这个问题应该怎么解决呢?
CMatrix & CMatrix::operator *(const CMatrix &mat)
{
CMatrix *pmat;
pmat = new CMatrix(m, n);
.....
return *pmat;
}
CMatrix & CMatrix::operator =(const CMatrix &mat)
{
if(&mat == this)
{
return * this;
}
m_row = mat.m_row;
m_line = mat.m_line;
m_data = new double [..];
memcpy(m_data, mat.m_data, ...);
return *this;
}
例如下面的使用,会造成内存的泄露,在A*B中,构造的矩阵,在=操作时,并没有释放,以后也没有机会释放了。
for(i=0; i<100; i++)
{
CMatrix C = A * B;
}
在乘法里分配的pmat怎么才能释放掉呢?
OK,换个思路,我们的返回值如果定义为一个临时变量,在=操作以后,就会被释放掉,
CMatrix CMatrix::operator *(const CMatrix &mat)
{
CMatrix pmat(m, n);
.....
return pmat;
}
- 由返回值为引用而造成的内存泄露
- 避免引用Context造成的内存泄露
- 谨防数组函数返回值造成的内存泄露
- 定时器造成的内存泄露
- Unity中由引用导致的内存泄露由弱引用解决
- weak_ptr 弱引用打破智能指针中循环引用造成的内存泄露
- 避免长期持有了一个Context的引用造成内存泄露
- Silverlight - 绑定造成的内存泄露
- 可能造成内存泄露的东西
- Android内存泄露造成的OOM问题
- Android asynTask造成的内存泄露
- 单例模式造成的内存泄露
- subString()造成内存泄露
- 内存泄露检测及cvClone造成的泄露
- Java泄露及造成内存泄露的原因
- handler引用的内存泄露
- cocos2dx 看上去很美的引用计数造成的内存泄露(二)——CCCallfuncO的参数
- cocos2dx 看上去很美的引用计数造成的内存泄露(一)——CCCallFunc对象
- Android的数据存储---可供选择的存储方案(三)
- GCC 编译优化选项
- Qt中字符串截取
- 运动目标检测、阴影检测及目标跟踪中用得到的标准测试视频下载(大量IBM提供视频)
- 一直滚动的TextView[跑马灯效果]
- 由返回值为引用而造成的内存泄露
- 转载标记一个win8开发系列的入口
- Best quotes from Life of Pi
- Qt中C++ string与QString相互转换
- 【OpenCV】基于Adaboost和Haar-like特征人脸识别
- 欧拉回路&特殊图下的哈密顿回路题集【夏天的风】
- 博弈总结
- 【OpenCV】有关内存释放 总结
- Windows 8 Directx 开发学习笔记(十三)利用模板实现木箱镜像