是否可能将 free() 与 new 和 delete 与 malloc() 一起使用?

Any possible use of free() with new & delete with malloc()?

在最近的一次面试中,面试官问我是否可以使用 free() 来释放之前使用 new 分配的 space。我回答是。 :|

我知道这对像 malloc() - free() 和 new - delete 一样工作。

请就此主题给我一些启发,如果有任何 new/delete/malloc/free 的源代码可供您使用或任何全面的指南来掌握此特定主题,请提供 link。

  1. 一方面,他们可能使用完全不同的堆。在我们的不止一个应用程序中,全局 newdelete 被重新定义以执行一些额外的簿记;如果你传递给 free 一个由 new 编辑的指针 return 它不会被识别为来自 malloc 的东西,因为我们在每个内存的开头保留了额外的信息堵塞。标准库可以做同样的事情。
  2. 为什么要有?如前所述,它们 return 的内存可以来自不同的堆,因此使用一个堆从另一个堆中释放内存是没有意义的。现在,if 您正在分配 POD 类型,而 if 全局 new 运算符只是 malloc 的薄包装,理论上它可以不小心使用free分配给new的内存,但除了增加混乱之外我真的不明白这样做的意义(和潜在的未定义行为)。
  3. newdelete 被引入作为处理非 POD 类型的运算符。如果你想要的只是 "raw" 内存 malloc (或者,一般来说,一个函数)就可以了,但是如果你想分配 objects 东西就变得更复杂了;分配机制必须知道分配数据的类型,而不仅仅是所需的大小,因为它必须调用构造函数(对于 delete 也是如此,它必须调用析构函数,尽管 new可能只是将函数指针保存到析构函数)。