gpt4 book ai didi

c++ - 哪一个是在 C++ 中分配未初始化内存的最惯用的方法

转载 作者:搜寻专家 更新时间:2023-10-31 02:09:35 28 4
gpt4 key购买 nike

选项 A:

T * address = static_cast<T *>(::operator new(capacity * sizeof(T), std::nothrow));

选项 B:

T * address = static_cast<T *>(std::malloc(capacity * sizeof(T)));

上下文:

template <typename T>
T * allocate(size_t const capacity) {
if (!capacity) {
throw some_exception;
}
//T * address = static_cast<T *>(std::malloc(capacity * sizeof(T)));
//T * address = static_cast<T *>(::operator new(capacity * sizeof(T), std::nothrow));
if (!address) {
throw some_exception;
}
return address;
}

std::malloc更短,但是 ::operator new显然是 C++,它可能是根据 std::malloc 实现的.在 C++ 中使用哪个更好/更惯用。

最佳答案

如果可能的话,您应该更愿意以类型安全的方式分配内存。如果那是不可能的,请选择选项 A,operator new(size_t, std::nothrow) 因为:

  • 运算符 newdelete 可以被合法覆盖(这在自定义分配器/泄漏检测场景中很有用)。
  • 可以有一个替代分配器来处理低内存(set_new_handler)。
  • 更多的是 C++。

首选 malloc/free 的唯一原因是如果您想使用 realloc 优化重新分配,这operator new/delete 不支持(realloc 是 not 一个简单的 free+malloc)。

关于c++ - 哪一个是在 C++ 中分配未初始化内存的最惯用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46455186/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com