Что является наиболее подходящей заменой calloc на c ++?
Для большинства целей std::vector
.Или std::string
, если вы собираетесь представлять символьную строку.Он автоматически удалит любую выделенную память.
Для структур данных, которые содержат много массивов, не являющихся взаимно смежными, вы можете избежать размера чуть больше указателя std::vector
, и вместо этого можетевыберите уникальный указатель:
auto ptr = std::make_unique<char[]>(nSize);
Вы можете также использовать инициализацию значения с новым выражением.Это то, что std::make_unique
делает внутренне:
new char[nSize]();
Но я бы не рекомендовал выделения без контейнера RAII.
Как упоминалось geza , calloc
может быть оптимизирован (в некоторых системах) так, что он может исключить установку памяти в ноль при выделении большого блока.Если такая оптимизация применима к вашему случаю и имеет измеримое значение, то может быть аргумент для использования std::calloc
в C ++.