-3

我有一个**object**personnel)作为内部(组合)另一个对象的成员,我想释放指向另一个()的内存**personnel并将其指向另一个**temppersonnel=temp),而不需要deleteing**personnel并且只是personnel=temp让程序运行良好,但是如果我试图delete **personnel让它混乱一切都好,我总是得到一个错误“ _Block_Type_Is_Valid (pHead->nBlockUse)

(我有析构函数(和virtual基本析构函数),其中一些什么都不做,但我仍然得到错误)。(我从各个角度都试过了delete personnel[i]delete []personnel[i]等等))

(为此失去了几天)

我做错了什么,是否正确delete,如果是,我该怎么做?

编辑:

if(personnel!=NULL)
    {
        for(i=0;i<numberofemployees;i++)
        { **/*what to do here*/**

    delete []this->personnel[i];

        }
        /*delete personnel;*/

    }
    personnel=temp;
    numberofemployees++;

    }

**personnel是这个类的成员,(Employee **personnel,employee是其他派生类的基类,各种员工,我用的是多态),这个函数只是添加一个员工,函数很长这就是为什么我只放了一部分,希望你能理解我,如果我不删除似乎一切正常,否则我会得到断言错误,

4

1 回答 1

1

我不确定我是否理解这个问题。但是,根据我的理解,如果您有:

struct Foo { ... };
Foo* foo = new Foo;
Foo** bar = &foo;

然后你只需要delete fooor delete *bar只调用其中一个)。

但是你通常不想跟踪这样的东西,而应该考虑使用智能指针,比如std::shared_ptror std::unique_ptr

于 2013-05-17T00:21:02.050 回答