Разница в том, что во втором случае карта вообще не создается;он создает ссылку на карту, которая уже существует.types
содержит карту, а types.get()
возвращает ссылку на эту карту, которую вы используете для инициализации своей собственной ссылки.Если вы модифицируете карту, используя эту ссылку, то вы модифицируете карту, содержащуюся в types
.
В первом случае создается пустая карта;затем он заменяет ее (предположительно, не пустой) картой, содержащейся в types
, оставляя types
пустым впоследствии.Это потребует большей поддержки от различных участвующих классов;некоторые могут нуждаться в создании по умолчанию, замене и, возможно, копировании и / или назначении.Кажется, код ошибки указывает, что одному из классов нужен общедоступный конструктор по умолчанию, но его нет;это может помочь диагностировать проблему, если включить полное сообщение об ошибке.