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

Jam*_*ase 0 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ris 5

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

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