Подтвердить что ты не робот

Конструктор/деструктор по умолчанию вне класса?

Является ли следующий законным согласно стандарту С++ 11 (= default вне определения класса)?

// In header file
class Test
{
    public:
        Test();
        ~Test();
};

// In cpp file
Test::Test() = default;
Test::~Test() = default;
4b9b3361

Ответ 1

Да, специальная функция-член может быть задана по умолчанию вне строки в файле .cpp. Поймите, что при этом некоторые из свойств встроенной функции по умолчанию не будут применяться к вашему классу. Например, если ваш конструктор копирования по умолчанию не определен, ваш класс не будет считаться тривиально скопируемым (что также дисквалифицирует его от признания POD). Точно так же деструктор, отличный от заданного по умолчанию, дисквалифицирует ваш тип от тривиального (или POD).

Это может быть полезно, если вы хотите иметь не-встроенный конструктор-копию и управлять тем, где он определен (возможно, взять контроль над сгенерированными определениями шаблонов, которые потребуются), но не хотите самостоятельно определять его самостоятельно с ручным списком инициализаторов членов, который был бы трудоемким и мог бы оставаться устаревшим при обслуживании.