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

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

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

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

11

Решение

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

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

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]