Это абстрактно, но не имеет виртуального деструктора. Удаление вызывает ошибку. Почему это?C++

Программы на C++. Форум разработчиков
Anonymous
Это абстрактно, но не имеет виртуального деструктора. Удаление вызывает ошибку. Почему это?

Сообщение Anonymous »

Код: Выделить всё

#include 
using namespace std;

class Animal{
public:
virtual void cry() = 0;
void eat();
};

class Cat:public Animal
{
public:
virtual void cry();
void grooming();
};

class Dog:public Animal
{
public:
virtual void cry();
void lash();
};

main()
{
Animal* animal = new Cat();
animal->eat();
animal->cry();

Cat* cat = (Cat*)animal;
cat->grooming();

Dog* dog = new Dog();
dog->cry();
dog->eat();
dog->lash();

delete animal;     //Delete called on'animal' that is abstract but has non-virtual destruct
delete cat;             //Thread 1: signal SIGABRT
delete dog;
}
При удалении возникает ошибка. Почему?
Попытка освободить память посредством удаления без использования деструкторов, но возникает ошибка
"Delete вызывается на 'animal', который является абстрактным, но имеет невиртуальную деструкцию
Поток 1: сигнал СИГАБРТ"


Подробнее здесь: https://stackoverflow.com/questions/690 ... g-an-error

Вернуться в «C++»