2016-08-08 7 views
0

ゲッタータイプのメソッドでは、どちらが最も良いのだろうと思っていますが、一方では参照で返すことでカプセル化を破るため、意見は異なります。最初にメンバーを変更可能にしようとすると、価値によって戻ってくるオーバーヘッドが大きくなります。このような状況では常に参考にして戻ってくることが最善ではないでしょうか?文脈に応じてコピーをしたいのかどうかを知りたいのですか?クラスの大規模データメンバーを参照または値で返します

+1

IMO、常にconst参照又は引用により大きなオブジェクトを渡します。ポインターに対する参照を優先する。 –

答えて

3

私はconstリファレンスを返すことが最良の選択肢だと考えています。これにより、大量のデータをコピーするオーバーヘッドを避けることができますが、外部からの変更も許可されません。

+0

今日は強制RVOがあります。 –

+0

@πάνταῥεῖ:彼はデータメンバーを返しています。 –

+0

私はconst参照を返すという考えを理解していますが、外部からメンバーを変更可能にする必要があるシナリオはどうですか? – navark

0

現代のコンパイラは、価値による戻り値を最適化し、コピー/移動オーバーヘッド[1] [2]をすべて削除することができます。だからあなたはそれについて心配する必要はありません。

参照をコピーするか、または参照を返すかを決定するには、クライアントではなくAPIデザイナーのルールである必要があります。このオブジェクトを変更可能かどうかを判断し、このクラスの使用例とその要件に従ってAPIを定義する必要があります。それは成就すべきです。


1. Copy elision

2. RVO

+1

RVOについての私の理解は、メソッドのローカル変数を返すが、クラスメンバ変数は返さないということですか? – navark

+0

ああ、あなたは正しい –

関連する問題