Я пытаюсь реализовать очередь с использованием последовательного списка. Однако для очередей со строковыми элементами программа вылетает из строя.Переопределение деструктора по умолчанию для строк в реализации класса
Ниже приводится соответствующая часть конструктора очереди:
{
string *ptr = new string[num];
}
Посмотрев на некоторое время, я подозреваю, что проблема с деструктора. Призывая деструктор, я удалить указатель на массив последовательного списка и установить его в NULL:
{
delete ptr;
ptr = NULL;
}
Однако, поскольку библиотека строки содержит деструктор по умолчанию, который удаляет строку, и я затем пытаюсь удалить несуществующий указатель. Я думаю, что это будет доступ к недоступной памяти, которая вызывает ошибку сегментации. Реализация Queue отлично работает для int и double, как она сейчас стоит.
Я использую шаблоны для типов int, double и string. Если деструктор пуст, это не приведет к динамическому освобождению памяти для целых и двойных элементов.
Есть ли какой-либо простой способ обойти это, кроме как иметь пустой деструктор класса и использовать деструктор строки по умолчанию?
Почему вы не используете 'std :: string'? Нет необходимости в переопределении деструкторов. Если ваш шаблон работает с 'int',' double', тогда он должен работать с 'std :: string', без особой необходимости« удалять »что-либо. – PaulMcKenzie
Опубликуйте минимальный, но полный пример, который читатели могут попробовать, просто копируя и вставляя код и компилируя его. –
Alf - этот вопрос относится к бонусу при назначении класса, поэтому я стараюсь быть более общим. Однако, спасибо за совет. –