C ++删除内存

时间:2014-10-25 16:25:55

标签: c++

我试图从我的记忆中删除所有对象,但我不确定删除什么以及最好的方式。

void createAss(Object& object) {
  Ass a1 = Ass("asdf");
  Ass a2 = Ass("aaa");

  object.addAss(a1);
  object.addAss(a2);
}

int main(void) {
  Object obj("header");

  createAss(obj);

  return 0;
}

所以我的主要问题是我必须在主函数中使用delete a1,a2和obj,还是应该由某个类的析构函数来完成?

1 个答案:

答案 0 :(得分:1)

main()的末尾,它们的所有本地对象都被它们各自的析构函数破坏。这是obj自动发生的事情。您不需要删除任何内容,也不需要调用析构函数。编译器会照顾。

这个问题与Object的定义有关,更准确地说,与addAss()~Object()的实施有关:

  • 如果addAss()使用new创建作为参数传递的对象的副本,那么~Object()当然应该删除它们。

  • 如果使用某些std容器来存储这些对象,容器的析构函数将负责必要的破坏。

<强> 注:

您的陈述Ass a1 = Ass("asdf");是正确的。但是当您谈到delete时,我想澄清一下这个语句不会创建指针:您只需创建一个使用构造函数a1初始化的本地Ass("asdf")对象。离开createAss()时会自动销毁。