0

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

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

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

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

接下来,structMyStruct也比较简单,如下(精简):

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 的内置类型)。我很确定这不会有错。无论如何,有人注意到这里有什么不正常的地方吗?欣赏任何见解..

4

1 回答 1

1

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

你遵守了三法则吗?
根据您提供的信息,尚不清楚您是否这样做。您需要提供一个复制构造函数复制赋值运算符,它们对您的动态分配的成员进行深层复制。如果您不这样做并且这两个运算符都没有private并且没有留下未定义然后您无法确定它们根本没有被使用,这就是您的问题所在

于 2012-06-13T18:14:11.593 回答