C ++では、参照を介してスコープを拡張しても安全ですか?
質問
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
所属していません StackOverflow