选项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 ++中使用哪一个更好/更惯用。
答案 0 :(得分:2)
如果可能的话,您应该更喜欢以类型安全的方式分配内存。如果那是不可能的,请选择选项A operator new(size_t, std::nothrow)
,因为:
new
和delete
(这在自定义分配器/泄漏检测方案中非常有用)。set_new_handler
)。选择malloc
/ free
的唯一理由是,如果您希望使用realloc
优化重新分配,{{1}不支持} operator
/ new
(realloc是not一个简单的free + malloc)。