От 10.4 Абстрактные классы. 6 в стандарте:
"Функции-члены могут быть вызваны из конструктора (или деструктора) абстрактного класса; эффект виртуального вызова чистой виртуальной функции прямо или косвенно для создаваемого (или уничтоженного) объекта из такого конструктора ( или деструктор) undefined."
Предполагая, что вызов нечистой виртуальной функции от конструктора (или деструктора) разрешен Стандартом, почему разница?
[EDIT] Дополнительные стандарты цитируют о чистых виртуальных функциях:
§ 10.4/2. Виртуальная функция задается чистым, используя в описании функции чисто-спецификатор (9.2) в объявлении функции. Чистая виртуальная функция должна быть определена только при вызове, или как если бы с (12.4), синтаксисом квалифицированного идентификатора (5.1).... [Примечание: Объявление функции не может предоставить как чисто-спецификатор, так и определение -end note]
§ 12.4/9 Деструктор может быть объявлен виртуальным (10.3) или чистым виртуальным (10.4); если в программе созданы какие-либо объекты этого класса или любого производного класса, должен быть определен деструктор.
Некоторые вопросы, требующие ответа, следующие:
-
Если чистой виртуальной функции не была предоставлена реализация, не должно ли это быть ошибкой компилятора или компоновщика?
-
Если чистой виртуальной функции была предоставлена реализация, почему она не может быть корректно определена в этом случае для вызова этой функции?