Я думаю это выдержка из Википедии объясняет это:
Явно дефолтные и удаленные специальные функции-члены
В C ++ 03 для классов, которые не предоставляют самих себя, компилятор предоставляет конструктор по умолчанию, конструктор копирования, оператор присваивания копии (operator =) и деструктор. Программист может переопределить эти значения по умолчанию, определив пользовательские версии. C ++ также определяет несколько глобальных операторов (таких как operator = и operator new), которые работают во всех классах, которые программист может переопределить.
Однако контроль над созданием этих значений по умолчанию очень незначителен. Например, чтобы сделать класс по своей сути не подлежащим копированию, требуется объявить личный конструктор копирования и оператор присваивания копии, а не определять их. Попытка использовать эти функции является нарушением правила одного определения. Хотя диагностическое сообщение не требуется, [5] это обычно приводит к ошибке компоновщика. [Цитата нужна]
В случае конструктора по умолчанию компилятор не будет генерировать конструктор по умолчанию, если класс определен с помощью каких-либо конструкторов. Это полезно во многих случаях, но также полезно иметь возможность иметь как специализированные конструкторы, так и сгенерированные компилятором значения по умолчанию.
C ++ 11 разрешит явное использование по умолчанию и удаление этих специальных функций-членов. Например, следующий тип явно объявляет, что он использует конструктор по умолчанию:
Пример кода:
struct SomeType
{
SomeType() = default; //The default constructor is explicitly stated.
SomeType(OtherType value);
};
Так как вы, похоже, являетесь поклонником Стандерда (почти все ваши Вопросы требуют объяснений по Стандартным Кавычкам), эта статья о том, как комитеты по стандартизации приходят к определению стандартных и удаленных функций, должна быть вам полезна:
Функции по умолчанию и удаленные