我启用了堆调试,因为我开始在别人的代码中看到内存泄漏错误,我将问题(至少,我认为)固定到类的析构函数,就在调用下面的delete []
之后。
MyClass::~MyClass() {
delete [] my_class_member_;
}
现在我确认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;
};
现在PtrList
是一个指针列表(我们正在使用的应用程序开发工具包的内置类型)。我很确定这不会有错。无论如何,这里有人注意到什么不正常的地方吗?欣赏任何见解..
根据 OP 的要求添加注释作为答案。
你遵循三法则吗?
从您提供的信息来看,尚不清楚您是否这样做。您需要提供一个复制构造函数和复制赋值运算符,用于对动态分配的成员进行深层复制。如果您不这样做,并且如果这两个运算符都没有private
并且没有未定义,那么您无法确定它们根本没有被使用,这就是您的问题所在