Когда ты не определяешь явно какие-то функции-члены, компилятор C++ автоматически генерирует их за тебя. Они называются неявные функции-члены.
Компилятор автоматически предоставляет следующие функции:
operator&) – возвращает адрес объектаДополнение в современном C++: Начиная с C++11, компилятор также неявно генерирует конструктор перемещения и оператор присваивания перемещения при определённых условиях. Они поддерживают семантику перемещения для повышения производительности.
Когда генерируются реализации по умолчанию: Компилятор генерирует эти функции только если ты их явно не определил. Определение любой из этих функций может помешать компилятору сгенерировать остальные.
В большинстве случаев в современном C++ рекомендуется явно определять или удалять эти функции, вместо того чтобы полагаться на неявную генерацию:
class MyClass {
public:
MyClass() = default; // явно значение по умолчанию
MyClass(const MyClass&) = default; // конструктор копирования
MyClass& operator=(const MyClass&) = default; // оператор присваивания
~MyClass() = default; // деструктор
MyClass* operator&() = default; // оператор получения адреса
};
Использование = default или = delete делает твои намерения явными и помогает избежать неожиданного поведения. Это особенно важно в классах, которые управляют ресурсами.
Компилятор автоматически генерирует конструктор перемещения и оператор присваивания перемещением только в C++11 и позже, но только если ты не определил явно ни один из пяти неявных членов класса.
Новый — ещё не проверен сообществом
Вы