delete []apple;
не будет компилироваться, но вы, очевидно, имеете ошибку времени выполнения, поэтому у вас должно быть delete []array;
. Прежде всего, это правильно!
Предполагая, что ваш класс находится рядом с тривиальной, причиной ошибки может быть, что два ваших NameClass
объектов имеют array
указатель, который указывает на тот же массив. Это может произойти, если ваш класс не имеет определяемого пользователем конструктора копирования и/или оператора присваивания, и в этом случае компилятор будет генерировать его для вас. Если после этого вы сделать что-то вроде этого
NameClass n1;
NameClass n2 = n1;
или
NameClass n1;
NameClass n2;
n2 = n1;
в коде, компилятор будет просто назначить все член (в том числе array
указателя) друг к другу, что делает array
точку к тому же кусок памяти в обоих объектах (и, в последнем случае, вызывает утечку памяти для памяти, первоначально выделенной в конструкторе n2
). Что вам нужно сделать, так это определить конструктор копирования и оператор присваивания, чтобы они сделали копию массива, на который указывает array
. Поскольку все, что вы делаете в деструкторе, в конструкторе копирования и в операторе присваивания копии (и в конструкторе, но это очевидно), должны быть совместимы друг с другом, это называется Rule of Three.
'delete [] array;' –
Использовать 'std :: vector'. – chris
@chris Ты знаешь, что это домашнее задание. – mostruash