Конструктор IMEvent вызывается до вызова конструктора alertText. В частности, поэтому его аргумент alertText.c_str()
оценивается до вызова конструктора alertText. Это не хорошо.
Выражения инициализатора вызываются в том порядке, в котором объявляются инициализируемые объекты (не обязательно в порядке, в котором перечислены инициализаторы). Итак, сначала родительские классы, затем члены. Компиляторы иногда предупреждают вас, если вы не перечислите инициализаторы в том порядке, в котором они будут фактически выполняться. Таким образом, при условии, что вы получите это право, правило «не используйте ничего, что вы не инициализировали». Этот код использует alertText до его инициализации.