Memory 当malloc为非平凡类型时会发生什么?

Memory 当malloc为非平凡类型时会发生什么?,memory,c++11,malloc,typetraits,Memory,C++11,Malloc,Typetraits,调用std::malloc只能创建普通类型的对象(包括数组) 我从笔记部分的下面读到它。 因此,如果我有一个非平凡的类型T,如果我使用std::malloc(sizeof(T)),会发生什么?std::malloc只是对旧C(不是C++)函数的“重命名” 因此,如果成功,它将malloc(sizeof(T))返回一个指针,指向T所需大小的未初始化内存区域 您需要在该内存区域上调用T的一些构造函数。您可以为此目的使用,例如: void* p = std::malloc(sizeof(T));

调用std::malloc只能创建普通类型的对象(包括数组)

我从笔记部分的下面读到它。
因此,如果我有一个非平凡的类型T,如果我使用std::malloc(sizeof(T)),会发生什么?

std::malloc
只是对旧C(不是C++)函数的“重命名”

因此,如果成功,它将
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++实现都有自己的标准<代码>::运算符new <代码>做类似的事情。(因此,
new
调用
malloc
!)

存储一个
T
就可以得到很好的存储空间。它实际上应该说的是,只有普通类型的对象不需要构造。我更正了链接引用。