Странный синтаксис в некотором коде Design Pattern: объяснение? - PullRequest
3 голосов
/ 31 марта 2011

Ладно, я столкнулся с этим сегодня, когда компилятор TI TMS470 C ++ отказался его принять.

Это происходит из Silver версии C ++ перевода примера кода "Head First Design Patterns".

class foo {
   ...
protected:
   virtual ~foo() = 0 {};  // compiler barfs on this line
};

Компилятор отказался принять комбинацию "= 0" (чисто виртуальная) и "{}" (я предполагаю, что это должно позволить производному классу в любом случае вызвать деструктор.

Что именно они пытаются сделать с этой строкой, действительно ли это законный C ++, и насколько это важно?

1 Ответ

8 голосов
/ 31 марта 2011

Это не законно C ++. Чистая виртуальная функция может иметь тело, но определение должно быть сделано вне класса.

В этом конкретном случае (функция является деструктором), функция должна иметь тело, если класс используется где-либо в программе (т. Е. Если он используется как базовый класс где-то, так как это единственный способ использовать абстрактный класс).

Правильный способ определить все это следующим образом

class foo {
   ...
protected:
   virtual ~foo() = 0;
};

inline foo::~foo()
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...