在接受采访时我问过这个问题:
在C ++中,
- 如果我们使用
malloc
分配内存并使用delete
释放分配的内存怎么办?- 如果我们使用
醇>new
分配内存并使用free
释放内存怎么办?如果代码中使用了上述内容,我们将面临哪些问题?
我的回答是没有区别。这样说我是对的吗?
答案 0 :(得分:14)
如果这样做,您将遇到未定义的行为。永远不要试试。虽然可以通过new
实现malloc()
,但delete
可以通过free()
实现new
,但无法保证它们实际上是以和的方式实现的用户可以自行决定重载delete
和malloc()
。您可能会遇到堆损坏。
除此之外不要忘记当你调用free()
时你得到原始内存 - 没有调用构造函数 - 当你调用{{1}}时,不会调用析构函数。这也可能导致程序未定义的行为和不正常的运行。
底线是......永远不要这样做。
答案 1 :(得分:1)
1)未定义的行为,但可能会“起作用”。析构函数将被释放的内存被调用,可能不希望被解构 2)未定义的行为,但可能会“工作”。析构函数不会被调用。
即如果它有效,并且无法保证,那么它只能完全按照基本内置数据类型的要求工作。