RPointerArray的ResetAndDestroy因为找不到析构函数而出现内存泄露

Juncof 2011-06-24 04:42:42
今天偶然发现有个地方代码有重复,然后我就把C1注销。
class C1
{
...
};

把C0的指针数组RPointerArray<C1> iArray;改成RPointerArray<C2> iArray;
class C0

RPointerArray<C1> iArray;
};

增加声明 class C2; c2在另外一个文件中定义的。
因为c1和c2非常类似,就用一个类了。

在使用时,引用了c0、c2的头文件。编译和运行都是正确的,但是退出程序出现内存泄露。

调试了一下发现是iArray.ResetAndDestroy();无法调用c2的析构。
主要是因为实现C0的cpp文件中没有包含定义c2的头文件,而使用C0的cpp包含了该头文件。从而出现了可以读存数据但无法销毁数据的情况。

听同事说iPhone开发过程不小心也会出现这个问题,在这里和各位分享一下。

...全文
179 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
twiker 2011-07-16
  • 打赏
  • 举报
回复
瞎说,你同事也是。
kyzyanyang 2011-06-30
  • 打赏
  • 举报
回复
要是有继承关系的话 基类的析构函数也要参与其中吧 还要记得把C2的析构函数加virtual

3,119

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧