我有一个名为“Menu”的类,该类具有一个指向“MenuItem”类的对象的指针数组。 Menu类的前三行相关内容如下:

class Menu
{
    MenuItem *items[5];

在Menu类的Constructor中,我将items创建为:
for(int i=0; i<nItems; i++)
{
    items[i] = new MenuItem(titles[i],...); //with all necessary parameters

在Menu类的析构函数中,我将items删除为:
~Menu()
{
for(int i=0; i<nItems; i++)
    delete items[i];

问题:我的问题是,当我调用此析构函数时,出现了错误Debug Assertion Failed!。除了这个析构函数之外,一切工作都很好。如果我不调用此析构函数,则不会出错。我想知道如何解决这个问题?我想删除此数组,以便我的内存干净。

最佳答案

很难说问题出在没有更多上下文的情况下(尽管我敢打赌拷贝构造函数和/或赋值运算符的问题,或者nItems的值错误)。

管理这些原始指针的一种更好的方法是首先不要使用它们。

考虑:

一组智能指针:

std::unique_ptr<MenuItem> items[5];

或智能指针的std::array:
std::array<std::unique_ptr<MenuItem>, 5> items;

或智能指针的vector<>:
std::vector<std::unique_ptr<MenuItem>> items;

关于c++ - 创建对象数组然后有效删除它们的更好方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25524733/

10-14 05:29