Инициализация и семантика перемещения
Какие есть способы инициализации полей класса?
В C++ есть несколько способов инициализации полей класса:
-
Инициализация в конструкторе:
- Поля инициализируются в списке инициализаторов конструктора.
class MyClass { public: MyClass(int a, int b) : x(a), y(b) {} private: int x, y; }; -
Инициализация по умолчанию (C++11 и выше):
- Поля инициализируются непосредственно при их объявлении.
class MyClass { private: int x = 0; int y = 0; }; -
Присваивание в теле конструктора:
- До входа в тело конструктора базы и поля уже проходят инициализацию. Показанные операторы = затем присваивают значения полям; для const-полей и ссылок этот способ не заменяет список инициализаторов.
class MyClass { public: MyClass(int a, int b) { x = a; y = b; } private: int x, y; };
Что такое семантика перемещения?
Семантика перемещения в C++ позволяет эффективно передавать ресурсы от одного объекта к другому без копирования. Использует специальные методы: конструктор перемещения и оператор присваивания перемещением.
Пример:class MyClass {
public:
MyClass(MyClass&& other); // Конструктор перемещения
MyClass& operator=(MyClass&& other); // Оператор присваивания перемещением
};