Прежде всего, это не скобки, а скобки.
Все области имеют брекеты. Но некоторые области являются более особенными, чем другие. Функция представляет собой целую область. В этом случае:
CNullDecorator(){}
Это объявляет пустой конструктор, конструктор без кода. Как правило, вы будете иметь конструктор делать что-то:
CNullDecorator()
{
// Some code here. Initialize this to that. Call some other
// function
}
Притворитесь, что есть код внутри фигурных скобок. Теперь у вас есть типичный конструктор. Но ничто фактически не требует, чтобы у вас был какой-либо код в конструкторе. Итак, если вы его не заметите, у вас будет пустой набор брекетов.
Это не делает ничего полезного. Вы можете полностью исключить конструктор, и компилятор с радостью предоставит его вам. Это вопрос стиля.
С другой стороны, есть причина, почему деструктор так оно и есть:
virtual ~CNullDecorator(){}
Это также заявляет, деструктор, который пуст, и не содержит никакого кода.
Но в этом случае есть причина для этого. Как и в случае с конструктором, если вы полностью исключаете деструктор, компилятор будет предоставлять деструктор по умолчанию.
Но это объявление делает что-то еще немного: объявляет виртуальный деструктор.
В этом случае необходимо, чтобы весь этот класс был виртуальным деструктором. Виртуальному деструктору не нужно было ничего делать явным, поэтому его содержимое было пустым. Но для класса требовался виртуальный деструктор, поэтому его нужно было объявить.
Если CNullDecorator не используется. Или конструктор или деструктор никогда не используется и только что определен, я могу его удалить? – marc
Рекомендуется, чтобы вы отредактировали свой вопрос, включив указанный выше запрос, а не задали его в комментариях. – CinCout