我启用了堆调试,因为我开始在其他人的代码中看到内存泄漏错误,我把问题(至少,所以我认为)归结为类的析构函数,在调用{{1下面。
delete []
现在我确认my_class_member_是一个指向结构对象的指针数组,比如MyClass::~MyClass() {
delete [] my_class_member_;
}
,已经使用MyStruct
分配了属性,所以我不确定导致这个泄漏的原因是什么?以下是new []
调用的内容:
new []
接下来,结构delete [] my_class_member_;
my_class_member_ = new MyStruct[somesize_];
也相对简单,如下(剥离):
MyStruct
现在struct MyStruct {
MyStruct() {}
~MyStruct() {
for( PtrList<PClass>::iterator it(ps); it.more(); it.next() ) {
delete it.cur();
}
for( PtrList<RClass>::iterator it(rs); it.more(); it.next() ) {
delete it.cur();
}
delete shift;
}
PtrList<PClass> ps;
PtrList<RClass> rs;
};
是一个指针列表(我们正在使用的应用程序devkit的内置类型)。我很确定这不会有错。无论如何,任何人都注意到这里有什么不合适的?欣赏任何见解..
答案 0 :(得分:1)
根据OP的要求添加评论作为答案。
您是否遵循了 Rule of Three ?
根据您提供的信息,您不清楚是否这样做。您需要提供 复制构造函数 和 复制赋值运算符 < / strong>执行动态分配的成员的 深层复制 。如果您不这样做,并且这两个操作符都不是private
而不是undefined那么你不能确定它们根本就没用过,这就是你的问题所在