以下の私の本のこの例で、戻り値の型とパラメーター リストの参照を正確に使用する必要がある理由について、私は混乱しています。値渡しを使用してすべてをコピーするよりもメモリの消費量が少ないという理由以外に、何か理由はありますか? または、カスケードを実行したい場合は、さらに処理する必要がありますか?
istream &operator>>( stream &input, PhoneNumber &number)
{
//input whatever
return input;
}
以下の私の本のこの例で、戻り値の型とパラメーター リストの参照を正確に使用する必要がある理由について、私は混乱しています。値渡しを使用してすべてをコピーするよりもメモリの消費量が少ないという理由以外に、何か理由はありますか? または、カスケードを実行したい場合は、さらに処理する必要がありますか?
istream &operator>>( stream &input, PhoneNumber &number)
{
//input whatever
return input;
}
a)ストリームはコピー可能ではないため、b)ストリームから入力を取得することはそれを変更することを意味するため、コピーではなくオリジナルを変更する必要があります(ただし、それは実現されます)。への参照PhoneNumber
は明らかである必要があります — ストリームからそのオブジェクトへの入力を取得しています。コピーで渡すと、オペレーターの外部からは見えなくなり、演習全体が無意味になります。
ポインターと参照を使用する最大の理由は、メモリーの使用量が減るためではなく (確かに使用されます)、使用する時間が減るからです。オブジェクトのコピーには時間がかかります。多くの場合、追加のメモリを割り当ててから、最後に割り当てを解除する必要があります。
さらに重要なことに、ストリームなどのオブジェクトはまったくコピーされることを意図していません。それらには、物理オブジェクト (ディスク上のファイルまたはネットワーク ストリーム) に関連する内部状態と、それらに関連するバッファーが含まれていますが、あまり効果がありません。コピーする感覚。