Поделиться через


Специальные функции-члены

Специальные функции-члены — это функции-члены класса (или структуры), которые, в некоторых случаях, компилятор автоматически создает для вас. Эти функции являются конструктором по умолчанию, деструктором, конструктором копирования и оператором назначения копирования, а также конструктором перемещения и оператором назначения перемещения. Если класс не определяет одну или несколько специальных функций-членов, компилятор может неявно объявлять и определять используемые функции. Созданные компилятором реализации называются специальными функциями-членами по умолчанию . Компилятор не создает функции, если они не нужны.

Вы можете явно объявить специальную функцию-член по умолчанию с помощью ключевого слова = по умолчанию . Это приводит к тому, что компилятор определяет функцию только в случае необходимости, так же, как если бы функция не была объявлена вообще.

В некоторых случаях компилятор может создавать удаленные специальные функции-члены, которые не определены и поэтому не вызываются. Это может произойти в случаях, когда вызов определенной специальной функции-член в классе не имеет смысла, учитывая другие свойства класса. Чтобы явно предотвратить автоматическое создание специальной функции-члена, ее можно объявить как удаленную с помощью ключевого слова = delete .

Компилятор создает конструктор по умолчанию, конструктор, который не принимает аргументы, только если вы не объявили ни одного другого конструктора. Если вы объявили только конструктор, принимаюющий параметры, код, который пытается вызвать конструктор по умолчанию, приводит компилятору к возникновению сообщения об ошибке. Конструктор, созданный компилятором по умолчанию, выполняет простую инициализацию объекта по умолчанию по умолчанию. Инициализация по умолчанию оставляет все переменные-члены в неопределенном состоянии.

Деструктор по умолчанию выполняет уничтожение объекта по умолчанию. Он является виртуальным, только если деструктор базового класса является виртуальным.

Операции копирования и перемещения по умолчанию выполняют операции создания и назначения, выполняющие копирование или перемещение элементов данных, не являющихся статическими. Операции перемещения создаются только при отсутствии деструкторов или операций перемещения или копирования. Конструктор копирования по умолчанию создается только в том случае, если конструктор копирования не объявлен. Он неявно удаляется, если операция перемещения объявлена. Оператор назначения копирования по умолчанию создается только в том случае, если оператор назначения копирования явно не объявлен. Он неявно удаляется, если операция перемещения объявлена.

См. также

Справочник по языку C++