Использовать this в конструкторе технически можно, но надо подумать. Объект не полностью сконструирован во время инициализации, поэтому есть определённые ограничения.
Тело конструктора может спокойно обращаться к членам данных из:
Это безопасно, потому что все эти члены гарантированно полностью сконструированы до выполнения тела.
Вызовы виртуальных функций во время конструирования — проблема. Если ты вызовешь виртуальную функцию-член, которая переопределена в производном классе, ты не попадёшь в реализацию производного класса — неважно, как ты её вызовешь:
this->method()method()Во время конструирования базового класса объект ещё не является объектом производного типа, даже если вызывающий конструирует производный объект.
Передача членов данных другим инициализаторам в списке инициализации требует строгого соблюдения правил порядка инициализации:
Важно: пытайся это делать только если ты полностью понимаешь эти правила языка. Иначе вообще не передавай члены объекта this в инициализаторы.
Используй this в теле конструктора только когда обращаешься к уже инициализированным членам. Избегай виртуальных вызовов и неясных последовательностей инициализации. Если сомневаешься, лучше перестрахуйся, чтобы не получить неопределённое поведение и скрытые баги.
Вызовы виртуальных функций через this в конструкторе базового класса будут вызывать реализацию производного класса, если объект, который конструируется, имеет тип производного класса.
Новый — ещё не проверен сообществом
Вы