9

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

コードでは、私が意味するのは次のとおりです。

MyCLass& function badIdea()
{
    MyClass obj1;
    ...
    return obj1;
}
4

3 に答える 3

22

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

于 2008-11-02T10:18:36.233 に答える
15

参照を使用してスコープを拡張できる唯一の場所は、または関数スコープ内のconst参照を使用する場合です (クラス メンバーを使用しない)。namespace

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

このトリックは、具体的なスコープ ガードの基本クラスへの参照を取得するために、 Andrei Alexandrescu の非常にクールなスコープ ガードで使用されています。const

于 2008-11-02T10:25:18.463 に答える
1

あなたが何を意味するのかを明確にしてください。

これを行うつもりであると仮定します:

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

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

たとえばブーストライブラリからのスマートポインタを見たいと思うかもしれません: clickety

于 2008-11-02T10:16:42.680 に答える