Программа плохо сформирована, потому что она создает класс, который не может инициализировать нестатический элемент-член ссылочного типа.
Я считаю, что gcc не сможет скомпилировать это, но я получил только предупреждение "нестатическая ссылка" int & test :: k 'в классе без конструктора ".
test
- это тип не POD-struct, поскольку он содержит ссылочный член (9 [класс] / 4)
new test
default-инициализирует динамически размещенный класс. (5.3.4 [expr.new] / 15)
To default-initialize объект типа test
означает вызов неявно объявленного и неявно определенного конструктора по умолчанию. (8,5 [dcl.init] / 5)
Неявно определенный конструктор по умолчанию эквивалентен конструктору по умолчанию с пустым mem-initialized-list и пустым телом функции. (12,1 [class.ctor] / 7)
Дальше больше:
Неявно определенный конструктор по умолчанию выполняет набор инициализаций
класс, который будет выполняться пользовательским конструктором по умолчанию для этого класса с пустым mem-initializer-list (12.6.2) и пустым телом функции. Если этот пользовательский конструктор по умолчанию будет некорректно сформирован, программа будет некорректно сформирована.
Если объект не является именем в mem-initializer-list и член не относится к типу класса [с дополнительными ограничениями], то объект не инициализируется.
В противном случае объект не инициализируется. Если объект имеет константный тип или ссылочный тип , [или ...], программа имеет некорректную форму. "(12.6.2 [class.base.init] / 4)