我有一个 CStrings 数组作为我班级的成员:
...
private:
CString mStrings[7];
...
尽管类的析构函数被正确调用,但我的分析工具告诉我,七个 mString 中的每一个都存在内存泄漏(每次我分配和解除分配我的类时)。
我认为 CStrings 自己管理他们的内存。我将它们放在一个数组中的事实是否会改变这里的任何东西?
我有一个 CStrings 数组作为我班级的成员:
...
private:
CString mStrings[7];
...
尽管类的析构函数被正确调用,但我的分析工具告诉我,七个 mString 中的每一个都存在内存泄漏(每次我分配和解除分配我的类时)。
我认为 CStrings 自己管理他们的内存。我将它们放在一个数组中的事实是否会改变这里的任何东西?
不,那不应该泄漏。new
除非您使用or new[]
(or malloc
) 分配并且不释放 (with delete
, delete[]
or free
) 内存,否则您不会得到任何泄漏。
在您的情况下,阵列处于自动存储中,因此它会自动被清理。此外,CString
s 会自动管理它们的内存。要么是误报,要么是其他代码导致了问题。
编辑 - 虽然 aCString
没有泄漏,但可能不是误报。你有没有机会初始化为:
unsigned char* x = new unsigned char[10];
CString str(x);
忘记了delete[] x
,或类似的东西?
编辑 2 - 也许错误来自你的类的未删除实例:
struct X
{
private:
CString mStrings[7];
};
//...
X* x = new X;
我将在这里做出一个信念的飞跃,这CString
实际上是一个char *
.
如果这是强制转换并且类已经分配了它们,那么析构函数需要释放它们。
该对象的删除将是一个浅的。有问题。
但最后一点 - 的类型是CString
什么?