我试图从我的记忆中删除所有对象,但我不确定删除什么以及最好的方式。
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,还是应该由某个类的析构函数来完成?
答案 0 :(得分:1)
在main()
的末尾,它们的所有本地对象都被它们各自的析构函数破坏。这是obj
自动发生的事情。您不需要删除任何内容,也不需要调用析构函数。编译器会照顾。
这个问题与Object
的定义有关,更准确地说,与addAss()
和~Object()
的实施有关:
如果addAss()
使用new
创建作为参数传递的对象的副本,那么~Object()
当然应该删除它们。
如果使用某些std容器来存储这些对象,容器的析构函数将负责必要的破坏。
<强> 注: 强>
您的陈述Ass a1 = Ass("asdf");
是正确的。但是当您谈到delete
时,我想澄清一下这个语句不会创建指针:您只需创建一个使用构造函数a1
初始化的本地Ass("asdf")
对象。离开createAss()
时会自动销毁。