RPointerArray的ResetAndDestroy因为找不到析构函数而出现内存泄露
今天偶然发现有个地方代码有重复,然后我就把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开发过程不小心也会出现这个问题,在这里和各位分享一下。
[解决办法]
要是有继承关系的话 基类的析构函数也要参与其中吧 还要记得把C2的析构函数加virtual
[解决办法]
瞎说,你同事也是。