对std::malloc的调用只能创建琐碎类型的对象(包括数组(。
我是从http://en.cppreference.com/w/cpp/types/is_trivial,在注释部分下。因此,如果我有一个非平凡类型T,如果我使用std::malloc(sizeof(T((会发生什么?
std::malloc
只是旧C(而非C++(函数malloc(3(的"重命名"。
因此,如果成功,malloc(sizeof(T))
将返回一个指针,指向T
所需大小的未初始化内存区域
您需要在该内存区域上调用T
的某些构造函数。你可以使用新的放置方式,例如:
void* p = std::malloc(sizeof(T));
if (!p) throw your_out_of_memory_exception();
T* ptr = new(p) T(32); /// placement new, with constructor called with 32
实际上,许多C++实现的标准::operator new
都有类似的功能。(所以new
调用malloc
!(