質問

C ++では、参照を介してスコープを拡張しても安全ですか?

コードでは、私が意味するものは:

MyCLass& function badIdea()
{
    MyClass obj1;
    ...
    return obj1;
}
役に立ちましたか?

解決

参照を介してスコープを拡張することは安全ではありません。 C ++のオブジェクトは、obj1が範囲外になったときに参照カウントされず、削除されます。badIdea()の結果を参照すると問題が発生するだけです

他のヒント

参照でスコープを拡張してもよいのは、 namespace または関数スコープ(クラスメンバーではなく)の const 参照のみです。

const int & cir = 1+1; // OK to use cir = 2 after this line 

このトリックは、 Andrei Alexandrescuの非常にクールなスコープガード。具体的なスコープガードの基本クラスへの const 参照をキャプチャします。

意味を明確にしてください。

これを行うつもりの場合:

int * p = NULL;
{
  int y = 22;
  p = &y;
}
*p = 77; // BOOM!

いいえ、絶対にそうではありませんが、参照を持つことでスコープは拡張されません。

スマートポインターを見たい場合があります。ブーストライブラリから: clickety

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top