我有一个名为“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/