new,delete,malloc&自由

时间:2010-07-06 06:57:34

标签: c++ memory-management malloc free new-operator

在接受采访时我问过这个问题:

  

在C ++中,

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

    如果代码中使用了上述内容,我们将面临哪些问题?

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

2 个答案:

答案 0 :(得分:14)

如果这样做,您将遇到未定义的行为。永远不要试试。虽然可以通过new实现malloc(),但delete可以通过free()实现new,但无法保证它们实际上是以的方式实现的用户可以自行决定重载deletemalloc()。您可能会遇到堆损坏。

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

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

答案 1 :(得分:1)

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

即如果它有效,并且无法保证,那么它只能完全按照基本内置数据类型的要求工作。