Memory 当malloc为非平凡类型时会发生什么?
调用std::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));
因此,如果我有一个非平凡的类型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
就可以得到很好的存储空间。它实际上应该说的是,只有普通类型的对象不需要构造。我更正了链接引用。