Что является наиболее подходящей заменой calloc c ++? - PullRequest
2 голосов
/ 10 апреля 2019

Название гласит.

Я пробовал:

new char[nSize];

но может вернуть неинициализированную память. где calloc обеспечивает инициализацию с нуля.

Я мог бы вызвать memset и т. Д., Но разве нет более прямого пути?

1 Ответ

4 голосов
/ 10 апреля 2019

Что является наиболее подходящей заменой 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 ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...