我在讨论多伦对这个问题的回答,据说
[one] 可能会发现 C++ 标准库定义了 new 以在后台使用 malloc。
我想知道这是不是真的。C++ 标准是否定义new
使用malloc
?
C++ 标准是否定义了新的使用 malloc?
C++ 标准(即定义 C++ 语言的标准文档)没有operator new
根据malloc()
. 但是,C++ 标准库的大多数实现malloc()
都使用分配内存是合理的。
根据 C++11 标准的第 18.6.1.1/4 段(约operator new
):
默认行为
- 执行循环:在循环内,函数首先尝试分配请求的存储空间。未指定尝试是否涉及对标准 C 库函数的调用
malloc
。
C++ 标准是否定义了新的使用 malloc?
不,尽管许多实现为默认实现这样做(为andnew
提供单独的堆没有多大意义)。malloc
new
此外,使用的分配器函数new
是可定制的(参见 §3.7.4.1),因此假设new' will always call
malloc` 是特别错误的,即使在给定的实现上也是如此。
不,malloc
只是分配内存。但是new
分配内存并调用构造函数(如果需要)。
可能在您实现的某些部分中new
找到malloc
类似内存分配器的机制。
我不这么认为,因为malloc
不知道构造函数,并且除了声明一块内存之外,您还需要一些额外的东西