13

在一次采访中,有人问我这个问题:

在 C++ 中,

  1. 如果我们使用分配内存malloc并使用delete释放分配的内存怎么办?
  2. 如果我们使用分配内存new并使用释放它free呢?

如果在代码中使用上述的东西,我们会面临哪些问题?

我的回答是没有区别。我这样说对吗?

4

2 回答 2

14

如果这样做,您将遇到未定义的行为。永远不要那样做。尽管new可能通过malloc()并且delete可能通过free()但不能保证它们确实以这种方式实现,并且用户可以自行决定是否超载。您可能会遇到堆损坏。newdelete

除此之外,不要忘记,当你调用时,malloc()你会得到原始内存——没有调用构造函数——当你调用时free()没有调用析构函数。这也可能导致程序的未定义行为和不正常运行。

底线是......永远不要这样做。

于 2010-07-06T06:59:41.533 回答
1

1)未定义的行为,但可能会“工作”。析构函数将在被释放的可能不想被解构的内存上调用。
2)未定义的行为,但可能会“工作”。析构函数不会被调用。

即,如果它可以工作,并且不能保证,那么它可能只会完全按照基本内置数据类型的要求工作。

于 2010-07-06T07:00:10.977 回答