是否可能将 free() 与 new 和 delete 与 malloc() 一起使用?
Any possible use of free() with new & delete with malloc()?
在最近的一次面试中,面试官问我是否可以使用 free() 来释放之前使用 new 分配的 space。我回答是。 :|
我知道这对像 malloc() - free() 和 new - delete 一样工作。
但是既然两者都利用了一些指针机制,那么把它们混在一起有什么问题呢?
必须有可能在混合两对时实现重新分配。可能吗?即使在理论上? 混合它们的可能场景是什么?
如果可以做到前面所说的那一点,那我们为什么要引入delete with new?
请就此主题给我一些启发,如果有任何 new/delete/malloc/free 的源代码可供您使用或任何全面的指南来掌握此特定主题,请提供 link。
- 我的另一个好奇心是,删除的注意事项和问题是什么?
- 一方面,他们可能使用完全不同的堆。在我们的不止一个应用程序中,全局
new
和 delete
被重新定义以执行一些额外的簿记;如果你传递给 free
一个由 new
编辑的指针 return 它不会被识别为来自 malloc
的东西,因为我们在每个内存的开头保留了额外的信息堵塞。标准库可以做同样的事情。
- 为什么要有?如前所述,它们 return 的内存可以来自不同的堆,因此使用一个堆从另一个堆中释放内存是没有意义的。现在,if 您正在分配 POD 类型,而 if 全局
new
运算符只是 malloc
的薄包装,理论上它可以不小心使用free
分配给new
的内存,但除了增加混乱之外我真的不明白这样做的意义(和潜在的未定义行为)。
new
和 delete
被引入作为处理非 POD 类型的运算符。如果你想要的只是 "raw" 内存 malloc
(或者,一般来说,一个函数)就可以了,但是如果你想分配 objects 东西就变得更复杂了;分配机制必须知道分配数据的类型,而不仅仅是所需的大小,因为它必须调用构造函数(对于 delete
也是如此,它必须调用析构函数,尽管 new
可能只是将函数指针保存到析构函数)。
在最近的一次面试中,面试官问我是否可以使用 free() 来释放之前使用 new 分配的 space。我回答是。 :|
我知道这对像 malloc() - free() 和 new - delete 一样工作。
但是既然两者都利用了一些指针机制,那么把它们混在一起有什么问题呢?
必须有可能在混合两对时实现重新分配。可能吗?即使在理论上? 混合它们的可能场景是什么?
如果可以做到前面所说的那一点,那我们为什么要引入delete with new?
请就此主题给我一些启发,如果有任何 new/delete/malloc/free 的源代码可供您使用或任何全面的指南来掌握此特定主题,请提供 link。
- 我的另一个好奇心是,删除的注意事项和问题是什么?
- 一方面,他们可能使用完全不同的堆。在我们的不止一个应用程序中,全局
new
和delete
被重新定义以执行一些额外的簿记;如果你传递给free
一个由new
编辑的指针 return 它不会被识别为来自malloc
的东西,因为我们在每个内存的开头保留了额外的信息堵塞。标准库可以做同样的事情。 - 为什么要有?如前所述,它们 return 的内存可以来自不同的堆,因此使用一个堆从另一个堆中释放内存是没有意义的。现在,if 您正在分配 POD 类型,而 if 全局
new
运算符只是malloc
的薄包装,理论上它可以不小心使用free
分配给new
的内存,但除了增加混乱之外我真的不明白这样做的意义(和潜在的未定义行为)。 new
和delete
被引入作为处理非 POD 类型的运算符。如果你想要的只是 "raw" 内存malloc
(或者,一般来说,一个函数)就可以了,但是如果你想分配 objects 东西就变得更复杂了;分配机制必须知道分配数据的类型,而不仅仅是所需的大小,因为它必须调用构造函数(对于delete
也是如此,它必须调用析构函数,尽管new
可能只是将函数指针保存到析构函数)。