Якщо пам'ять, яку ви виділяєте, - це клас з конструктором, який робить щось корисне, оператор new зателефонує цьому конструктору і залишить ваш об'єкт ініціалізованим.
Але якщо ви виділяєте POD або щось, що не має конструктора, який ініціалізує стан об'єкта, ви не можете виділити пам'ять та ініціалізувати цю пам'ять з новим оператором за одну операцію. Однак у вас є кілька варіантів:
1) Замість цього використовуйте змінну стека. Ви можете виділити та ініціалізувати за замовчуванням за один крок, як це:
int vals[100] = {0}; // first element is a matter of style
2) використання memset()
. Зауважте, що якщо об'єкт, який ви виділяєте, не є ПОД , memsetting це погана ідея. Одним із конкретних прикладів є те, що якщо ви запам’ятали клас, у якого є віртуальні функції, ви підірвете vtable і залишите об’єкт у непридатному стані.
3) У багатьох операційних системах є дзвінки, які роблять те, що ви хочете - виділяйте на купі та ініціалізуйте дані на щось. Приклад Windows може бутиVirtualAlloc()
4) Зазвичай це найкращий варіант. Уникайте взагалі керування пам’яттю. Ви можете використовувати контейнери STL для того, щоб робити майже все, що ви зробили б із необробленою пам'яттю, включаючи розподілення та ініціалізацію всіх одним махом:
std::vector<int> myInts(100, 0); // creates a vector of 100 ints, all set to zero