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