Является ли следующий закон в соответствии со стандартом C ++ 11 (= default
вне определения класса)?
// In header file
class Test
{
public:
Test();
~Test();
};
// In cpp file
Test::Test() = default;
Test::~Test() = default;
Да, специальная функция-член может быть определена по умолчанию вне файла в файле .cpp. Имейте в виду, что некоторые свойства встроенной по умолчанию функции не будут применяться к вашему классу. Например, если ваш конструктор копирования определен по умолчанию вне строки, ваш класс не будет считаться легко копируемым (что также лишает его возможности распознаваться как POD). Точно так же определенный по умолчанию деструктор вне линии будет лишать ваш тип тривиальности (или POD).
Это может быть полезно, если вы хотите иметь не встроенный конструктор копирования и контролировать, где он определен (возможно, взять контроль над сгенерированными определениями шаблонов, которые ему потребуются), но не хотите вручную определять его вручную. созданный список инициализатора элементов, который был бы трудоемким и мог устареть при обслуживании.
Других решений пока нет …