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



对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!(

相关内容

  • 没有找到相关文章

最新更新