【发布时间】:2015-08-13 18:51:49
【问题描述】:
假设Member 和MyList 是两个用户定义的类。在以下代码中:
void fillList(MyList &list1)
{
Member m1("aaa");
Member m2("bbb");
list1.insert(m1);
list1.insert(m2);
}
void func1()
{
MyList lst;
fillList(lst);
lst.printAll();
}
int main()
{
func1();
return 0;
}
C++ 在什么时候调用m1、m2 和lst 的析构函数?
假设 C++ 不会删除将再次使用的对象总是安全的吗?
【问题讨论】:
-
为什么不运行它?这似乎是用几个打印语句来验证的微不足道的事情。
-
Is it always safe to assume C++ does not remove an object which will be used again?否。但这种情况是否有效取决于您的插入方法。 -
@Quirliom 认真的吗? SO有很多关于“UB哪些有效”的问题..
-
@deviantfan 其实我需要知道它来设计
insert:) -
@sermin 正如下面的 cmets 中所说,如果 insert 没有引用(
void insert(Member m)但不是void insert(Member &m))那么没关系,因为在传递时会复制该值。当m1和m2被删除时,插入的副本将保留在列表中的某个位置。如果因为insert没有复制它而使用引用和指针来引用已删除的对象,那么这很糟糕。
标签: c++ class memory-management destructor