C++では、参照を介してスコープを拡張しても安全ですか?
コードでは、私が意味するのは次のとおりです。
MyCLass& function badIdea()
{
MyClass obj1;
...
return obj1;
}
参照によってスコープを拡張することは安全ではありません。C++ のオブジェクトは、obj1 がスコープ外になると参照カウントされず、削除されます。badIdea() の結果を参照すると、問題が発生するだけです。
参照を使用してスコープを拡張できる唯一の場所は、または関数スコープ内のconst
参照を使用する場合です (クラス メンバーを使用しない)。namespace
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