Я думаю, что ваша проблема в понимании , когда вызывается конструктор.
Когда вы создаете новый объект MyMachine
, сначала код инициализирует все MyMachine
члены до того, как попадет в тело функции конструктора. Вы можете инициализировать членов самостоятельно в списке инициализатора , прежде чем попасть в тело ctor:
MyMachine::MyMachine(int id) :
_id(id)
{
}
На самом деле, это более эффективный способ обработки инициализации, поскольку все члены должен быть инициализирован перед телом ctor, поэтому в предыдущем состоянии код будет:
- Инициализировать
_id
, используя его ctor без аргументов. - Поместите значение
id
в MyComponent.
Когда вы используете список инициализатора, в инициализации есть только один шаг, что больше эффективный (особенно в гораздо более сложных типах!).