2

我需要确定哪些对象被销毁,以及此代码是否存在任何内存泄漏。

  void myfunc()
  { 
    Photo a(1, 2);
    Photo* pt = new Photo(2, 3);
    throw runtime_error("to test the exception");
  }

我的回答是

对象在函数 end 后被销毁,通过自动调用 Photo 类的析构函数。

存在内存泄漏。我们没有删除使用 new 运算符动态分配的 pt。所以我们需要添加delete pt;在函数结束时。

我的回答正确吗?

4

1 回答 1

0

你错了。尝试这个:

void myfunc()
{ 
   Photo a(1, 2);
   Photo* pt = new Photo(2, 3);
   throw runtime_error("to test the exception");
   delete pt;
}

在 valgrind 下编译和运行。你会得到一个泄漏 -delete pt;永远不会达到。

于 2013-04-26T01:58:24.870 回答