由于内存泄漏错误,我开始在其他人的代码中看到错误,因此启用了堆调试,并且在调用下面的delete []之后,将问题(至少是我认为的)固定到了一个类的析构函数上。

MyClass::~MyClass() {
    delete [] my_class_member_;
}


现在,我确认my_class_member_是指向结构对象(例如MyStruct)的指针的数组,已使用new []分配了属性,因此我不确定是什么导致此泄漏?这是new []调用的样子:

delete [] my_class_member_;
my_class_member_ = new MyStruct[somesize_];


接下来,struct 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是一个指针列表(我们正在使用的应用程序devkit的内置类型)。无论如何,这里有人注意到什么了吗?赞赏任何见识。

最佳答案

根据OP的要求添加评论作为答案。

您是否遵循Rule of Three
从您提供的信息来看,是否执行此操作尚不清楚,您需要提供一个复制构造函数和一个复制赋值运算符来对动态分配的成员进行深层复制;如果不这样做,并且这两个运算符都不private且未定义,则您无法确定根本没有使用它们,这就是您的问题所在

07-26 00:21