0

したがって、オブジェクトが参照によって渡されない場合、デストラクタは 2 回呼び出されます。しかし、参照渡しするとすべて問題ありません。

<!-- 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;
}

デストラクタが 2 回呼び出されるのはなぜですか? また、オブジェクトをパラメーターとしてオーバーロードされたオペレーターに渡すときに、オブジェクトを参照渡しする必要があるのはなぜですか?

4

1 に答える 1

5

値を渡すと、実際にはオブジェクトのコピーを作成しているため、2 回呼び出されます。したがって、破棄するオブジェクトが 2 つあります。

2 番目の質問に関しては、参照によって新しいオブジェクトを渡すと、データの新しいコピーを作成する必要がなくなります。コピー コンストラクターを設計していない場合、これはより効率的であり、予期しない動作を回避します。

于 2012-11-29T13:00:45.863 に答える