标题说了。
我尝试过:
new char[nSize];
,但是它可以返回未初始化的内存。
其中calloc
确保零初始化。
我可以称呼memset等-但没有更直接的方法吗?
答案 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
的争论。