ringa_lee2017-04-17 15:31:27
によって返される値はもちろんコピーされます。信じられない場合は、GetcomputerFishes
の戻り値を変更して、this->computerFishes
のデータが一貫しているかどうかを確認してください。
天蓬老师2017-04-17 15:31:27
アドレスが異なるのはなぜですか?
GetcomputerFishes
関数の戻り値の型は vector<ComputerFish *>
、つまり値によって返され、同時に return ステートメントの式は computerFishes
であるため、ここでは一時オブジェクトがコピーされ、最初に構築され、その後、一時オブジェクトが返されます (注: コピーの省略により、この一時オブジェクトは実際の実行時にコピーおよび構築されない場合があります)。つまり、返されるオブジェクトは MyClass のメンバー変数ではなく、このメンバー変数をコピーして構築された一時オブジェクトであるため、アドレスが異なります。 (注: 値で呼び出す場合の式の型は右辺値です。ユーザー コードは戻り値のアドレスを直接取得できません。つまり、&x.GetcomputerFishes()
はできません。ただし、左辺値に変換してアドレスを取得することはできます。)
GetcomputerFishes によって返されるオブジェクトをcomputerFishes にする方法は?
この関数で MyClass のプライベート メンバーのcomputerFishes を返すようにしたい場合は、参照によってそれを返すことができます。
リーリーこの関数オーバーロードのセットは、const MyClass オブジェクトと非 const MyClass オブジェクトのサポートをそれぞれ提供します。
次に、戻り値を使用して参照変数を初期化できます (非参照変数を初期化し、初期化をコピーすることもできます)。
リーリーもちろん、関数の戻り値を介して直接アクセスすることもできます:
リーリー