最适合用c ++代替calloc的是什么?

时间:2019-04-10 20:24:41

标签: c++ c++17

标题说了。

我尝试过:

new char[nSize];

,但是它可以返回未初始化的内存。 其中calloc确保零初始化。

我可以称呼memset等-但没有更直接的方法吗?

1 个答案:

答案 0 :(得分:4)

  

最合适用c ++代替calloc的是什么?

对于大多数用途,std::vector。或std::string(如果要表示一个字符串)。它将自动删除它分配的任何内存。

对于包含许多彼此不连续的数组的数据结构,您可能要避免使用std::vector略大于指针的大小,而是可能选择唯一的指针:

auto ptr = std::make_unique<char[]>(nSize);

您还可以将值初始化与新表达式一起使用。这是std::make_unique内部执行的操作:

new char[nSize]();

但是我不建议没有RAII容器的分配。


geza所述,calloc可以进行优化(在某些系统上),以便在分配大块时可以忽略将内存设置为零。如果这种优化适用于您的情况,并且可衡量的意义重大,那么可能存在在C ++中使用std::calloc的争论。