Страницы

Поиск по вопросам

вторник, 6 ноября 2018 г.

Чистые виртуальные функции и чистый виртуальный деструктор обьявленные с пустым телом

до сих пор я знал что чистым виртуальным функциям не нужно тело, и обьявлять их даже с пустым телом, является ошибкой. Мне недавно говорят обратное:
class A { public: ~A() = 0 {} //... }
Что так не то что нельзя, но и нужно так обьявлять...
Вопрос
Скажите пожалуйста, зачем чистой виртуальной функции тело? Тело чего? Где смысль чистой виртуальности тогда? И в конце концов, если это правда, почему тогда мой компилятор выдает ошибку? Это что то новое после C++14?..
Вот ошибка моего компилятора:
C:\Users\Mk\Documents\H\C++\test\main.cpp:12: error: pure-specifier on function-definition virtual ~A() = 0 {}


Ответ

Формально в 10.4.2 есть замечание-
Объявление функции не может содержать одновременно чистый-спецификатор и описание функции. ■ Пример. struct C { virtual void f() = 0 { }; // неправильно }; Конец примера.
Но при этом ее можно определять:
Описывать чистую виртуальную функцию необходимо только в случае, когда она вызывается посредством синтаксиса квалифицированного-идентификатора (5.1), или похожим образом (12.4).
Т.е., похоже, что чисто виртуальная функция может быть определена, но только не в объявлении.

Комментариев нет:

Отправить комментарий