---
title: Инициализация и семантика перемещения
seo:
  title: Инициализация и семантика перемещения — C++ Developer
  description: Тема «Инициализация и семантика перемещения» для собеседования C++ Developer. Какие есть способы инициализации полей класса? Что такое семантика перемещения?
---

[Все темы C++ Developer](/c-developer)

## <strong>Какие есть способы инициализации полей класса?</strong> [#q-14bee738d69b8156b6edfba558605738]

В C++ есть несколько способов инициализации полей класса&#58;

{/* prettier-ignore */}
1. <strong>Инициализация в конструкторе</strong>&#58;

    - Поля инициализируются в списке инициализаторов конструктора.

    ```cpp
    class MyClass {
    public:
        MyClass(int a, int b) : x(a), y(b) {}
    private:
        int x, y;
    };
    ```

1. <strong>Инициализация по умолчанию (C++11 и выше)</strong>&#58;

    - Поля инициализируются непосредственно при их объявлении.

    ```cpp
    class MyClass {
    private:
        int x = 0;
        int y = 0;
    };
    ```

1. Присваивание в теле конструктора&#58;

    - До входа в тело конструктора базы и поля уже проходят инициализацию. Показанные операторы = затем присваивают значения полям; для const-полей и ссылок этот способ не заменяет список инициализаторов.

    ```cpp
    class MyClass {
    public:
        MyClass(int a, int b) {
            x = a;
            y = b;
        }
    private:
        int x, y;
    };
    ```

:::note[Ссылки для изучения]

1. [Конструкторы и инициализация объектов в C++](https://metanit.com/cpp/tutorial/5.2.php)
   :::

---

## <strong>Что такое семантика перемещения?</strong> [#q-14bee738d69b814f89acc9dff93d7530]

Семантика перемещения в C++ позволяет эффективно передавать ресурсы от одного объекта к другому без копирования. Использует специальные методы&#58; конструктор перемещения и оператор присваивания перемещением.

<strong>Пример&#58;</strong>

```cpp
class MyClass {
public:
    MyClass(MyClass&& other);  // Конструктор перемещения
    MyClass& operator=(MyClass&& other);  // Оператор присваивания перемещением
};
```

:::note[Ссылки для изучения]

1. [Основы move semantics в C++](https://proglib.io/p/osnovy-move-semantics-v-c-2021-09-21)
   :::
