4

我在讨论多伦对这个问题的回答,据说

[one] 可能会发现 C++ 标准库定义了 new 以在后台使用 malloc。

我想知道这是不是真的。C++ 标准是否定义new使用malloc

4

4 回答 4

7

C++ 标准是否定义了新的使用 malloc?

C++ 标准(即定义 C++ 语言的标准文档)没有operator new根据malloc(). 但是,C++ 标准库的大多数实现malloc()都使用分配内存是合理的。

根据 C++11 标准的第 18.6.1.1/4 段(约operator new):

默认行为

  • 执行循环:在循环内,函数首先尝试分配请求的存储空间。未指定尝试是否涉及对标准 C 库函数的调用malloc
于 2013-03-12T19:28:58.593 回答
2

C++ 标准是否定义了新的使用 malloc?

不,尽管许多实现为默认实现这样做(为andnew提供单独的堆没有多大意义)。mallocnew

此外,使用的分配器函数new是可定制的(参见 §3.7.4.1),因此假设new' will always callmalloc` 是特别错误的,即使在给定的实现上也是如此。

于 2013-03-12T19:28:11.040 回答
1

不,malloc只是分配内存。但是new分配内存并调用构造函数(如果需要)。

可能在您实现的某些部分中new找到malloc类似内存分配器的机制。

于 2013-03-12T19:29:32.237 回答
-1

我不这么认为,因为malloc不知道构造函数,并且除了声明一块内存之外,您还需要一些额外的东西

于 2013-03-12T19:29:56.223 回答