调用析构函数。并输入输出重载

时间:2012-11-29 12:59:59

标签: c++

因此,如果我的对象未被引用传递,则析构函数被调用两次。 但是当我通过引用传递它时一切都还可以。

<!-- language: lang-cpp -->

ostream& operator<<(ostream& os,Counter_naslednik_1 &object){
 cout<<endl<<object.date<<endl;
 return os;
 }

//-----------------
void main(){
Counter_naslednik_1 new_object;
cout<<new_object;
}

为什么析构函数被调用两次?当我将它作为参数传递给重载运算符时,为什么要通过引用传递我的对象?

1 个答案:

答案 0 :(得分:5)

它被调用两次,因为当你通过值传递时,你实际上正在制作一个对象的副本,所以有两个对象需要销毁。

关于第二个问题,再一次,通过引用传递新对象可以避免制作新数据副本。如果您没有设计复制构造函数,这会更有效并避免意外行为。