c++ - calloc 最合适的 C++ 替代品是什么?

标签 c++ c++17

标题已经说明了这一点。

我已经尝试过:

new char[nSize];

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

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

最佳答案

What's the most suitable c++ replacement of 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 可能会有争议。

关于c++ - calloc 最合适的 C++ 替代品是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55620811/

相关文章:

c++ - 如何在 C++/Boost 中的特定时间唤醒

C++ - 为什么 std::function<some_type_t, void> 无效?

c++ - pmr::vector 比 std::vector 慢

c++ - 默认模板参数的模板推导

c++ - 如何访问可变 lambda 函数参数

c++ - 为什么编译器可以通过引用传递和值传递来重载函数

android - Android 中的 native OpenCV UnsatisfiedLinkError libopencv_java.so not found

c++ - 几个 Direct3D 设备和 Intel GMA945

Visual Studio 和 Eclipse 中的 C++ 图形库

c++ - 我什么时候应该使用 std::string/std::string_view 作为参数/返回类型