Вы не просто получаете нечитаемость, вы также получаете большую способность вызывать ошибки, переводя объекты в недопустимое состояние.
Единственное, что он имеет отношение к RAII, это то, что RAII зависит от разумных инвариантов, а инициализаторы позволяют легко разбивать инварианты.
Однако это может быть очень полезно при создании анонимного значения или при создании простых объектов в стиле старых данных (где класс является «тупым» контейнером значений, а инварианты не так важны). Они могут быть особенно полезны для лямбда-функций и выражений linq, хотя они не являются абсолютно необходимыми и не ограничиваются ими.
Когда класс поддерживает инвариант, то не рекомендуется инициализировать его таким образом, и, как правило, любая перезапись из конструктора, который принимает значения в новый синтаксис, является плохой идеей.
В вашем примере ваш первый случай не использует свой конструктор для инициализации до гарантированного действительного состояния. Это неприятный запах, (что должен делать игрок до того, как у него есть каталог, время начала и время окончания?), Но когда это целесообразно для данного класса, то также используется новый синтаксис.
То, что новый синтаксис может устанавливать объект в одном выражении, которое, в свою очередь, может быть частью другого выражения, - это то, где это может быть полезно, и да, это действительно включает в лямбда-выражения.