Не уверен в подходящем названии, но это вытекает из этого обсуждения:
Есть ли в скобках после имени типа разница с новым?
В Visual Studio 2008, когда я запускаю следующий код:
struct Stan
{
float man;
};
int main()
{
Stan *s1 = new Stan;
Stan *s2 = new Stan();
}
Изучая местных жителей, s1 имеет неинициализированное число с плавающей точкой со случайным значением. s2 - это значение, инициализированное до 0.
Однако, если я добавлю строковый элемент данных, float в обоих случаях не будет инициализирован.
struct Stan
{
std::string str;
float man;
};
Однако строка в обоих случаях инициализируется. Я попытался добавить другие не-POD классы вместо строки, но последний случай происходит, только если я добавляю строковый элемент данных. Я понимаю, что добавление строки по-прежнему сохраняет класс POD? Если это не класс POD, то его значение должно быть инициализировано независимо от скобок, верно? Любые идеи, почему плавающие (и другие примитивные типы данных в этом отношении) не инициализируются, когда я добавляю строковый элемент данных?