Что это значит в конструкторе?
struct Node {
string val;
Node* next;
Node(string _val) : val(_val), next(nullptr){}
};
что тут в конструкторе означает эта часть: : val(_val), next(nullptr)???
Ответы (1 шт):
Автор решения: gbg
→ Ссылка
- Что это такое?
Это вызов конструкторов/инициализаторов для полей класса. Выполняется во время создания экземпляра класса. Конструкторы будут вызваны в том порядке, в каком создаются поля, а не в том порядке, в каком они перечислены здесь. Это важно, если при создании имеются зависимости между полями.
- Зачем это? Ведь я могу просто присвоить нужные значения в теле конструктора?
- Это расточительно. Некоторые объекты создаются и удаляются заметное количество времени, кроме того, если следовать принципам RAII, такое избыточное создание-удаление может создать неоправданную нагрузку на ресурсы.
- Некоторые поля нужно обязательно присвоить прямо при создании. В частности, речь идет о константах и ссылках. Без такого синтаксиса иметь такие поля было бы невозможно.
- Когда этим пользоваться?
Всегда. Нужно как можно шире применять полную инициализацию объектов в конструкторе (опять же, следовать RAII) и недопускать ситуаций, когда объект может находиться в неконсистентном состоянии.