ページ 11

値取得用関数について

Posted: 2017年11月24日(金) 02:29
by エドモンド本田
#include <iostream>
using namespace std;
class A{
public:
A(int value_) : value { value_ }
{
}
int get1() const {
return value;
}
const int& get2() const {
return value;
}
private:
int value;
};
int main(){
A a { 10 };
//例
cout << a.get1() << endl;
cout << a.get2() << endl;
return 0;
}
get1もget2も値を取得できるという点は同じです。
しかし、例のように値を取得した場合get2の方はget1に比べてコピーを生成していない分効率が良いと思うのです。
コピーを取得する関数を使用する利点があれば教えてください。

Re: 値取得用関数について

Posted: 2017年11月24日(金) 06:41
by エドモンド本田
計算後の値などを返すときに使うんですね。自己解決しました。

Re: 値取得用関数について

Posted: 2017年11月24日(金) 08:56
by Dixq (管理人)
一般的にメンバ変数の値を取得するような関数であればget1の書き方をします。
int型であれば参照を返してもコピーを返してもほとんど計算コストは変わりません。
メンバ変数をいくつも持っているクラスや構造体の場合でオブジェクトの大きさが大きいときにポインタや参照を使います。

また、メンバ変数の参照を保持するとそのメンバ変数のライフサイクルを意識しなければなりません。
メンバ変数があるタイミングで開放されたら返り値もアクセスしてはいけないのです。
一方コピーを返していれば、返した先の責任で処理が可能なので、把握がしやすくなります。