2016-08-10 5 views
1

const参照を返すことが時々問題を引き起こすことは知っていますが、これはthreadの回答と同じです。 しかし、暗黙のthisポインタで返されたオブジェクトのconst参照の次の使用が常に安全かどうかはわかりませんか?関数が他のメンバ関数から呼び出されたconst参照を返す

class foo 
{ 
    private: 
    std::vector<double> vec; 

    public: 
    const std::vector<double>& Get_vec() const 
    { 
     return vec; 
    } 

    void some_method() 
    { 
     const std::vector<double> & vec2 = Get_vec(); // this->Get_vec 

     // do something with vec2 
    } 
} 
+1

これが問題を引き起こす唯一の方法は、呼び出し元が文字列をコピーするのではなく参照を格納し、オブジェクトが破棄された後にその参照を使用しようとする場合です。どうしたの? – NathanOliver

答えて

1

この文は、

const std::vector<double> & vec2 = Get_vec(); 

(私はメソッドのボイドsome_methodを意味し、そのメソッド内でクラスのデータメンバへの参照を使用してに問題が何もあり

const std::vector<double> & vec2 = vec; 

と等価ではありません() )。どのような場合でも、そのメソッド内のオブジェクトのデータメンバへの参照のライフタイムは、オブジェクト自体のライフタイムよりも短くなります。

関連する問題