Короткий ответ
Компилятор не выдает никакой ошибки, потому что совершенно нормально создать указатель на абстрактный класс.
Длинный ответ
Если не в порядкечтобы создать экземпляр класса и создать объекты типа, который необходим компилятору, знает состав этого типа.
Вы можете создать указатель на абстрактный класс, поскольку все указатели в системе имеют одинаковый размер независимо оттип, на который они указывают.
Обратите внимание, что создание указателя не вызывает конструктор.
Вы не можете создать объект класса Abstract, потому что у класса есть некоторый метод, который не полностью определен, и, следовательно, компилятор делаетне знаю состав класса.Таким образом, запретив его создание.
РЕДАКТИРОВАТЬ:
Даже если вы предоставляете определение чисто виртуальной функции (и это совершенно правильно сделать), вы все равно не можете создать экземпляр класса Abstract, потому что в тот момент, когда вы объявляетеФункция как чисто виртуальная, компилятор рассматривает класс как абстрактный (Incomplete), и он больше не может быть создан.