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