2017-12-24 31 views
2

は私の概念的な問題を表しているプログラムです。ここでユニークなポインタ参照にユニークなポインタ参照を保持し

int main() 
{ 
    unique_ptr<int> a = make_unique(5); 
    { 
    unique_ptr<int>& b = a; 
    } 
    printf("%d",*a); 
} 
  • aオブジェクトの所有者ですか?
  • aが有効範囲外になると、somepointerの値は破壊されますか?

上記のコードを実行することによって、私はそれがわかりませんが、なぜわかりません。課題ではどういうことが起こりますか?

+2

'a'は(あなたが名前を付けることができるという事実から明らかなように)ポーニティを印刷するときにスコープから外れていません。どうして問題があると思ったのですか? – StoryTeller

+0

このコードには割り当てがありません。初期化を1回し、変数を参照にバインドするだけです。リファレンス 'b'は何を期待していますか? – Galik

+0

リファレンスがどのように動作しているのか知っていますか? – Galik

答えて

3

aは、この時間全体にわたってオブジェクトの所有者のままです。

C++では、変数名の前に&を配置すると、暗黙のポインタのような参照が作成されます。 bを参照として宣言しているので、このコードにはunique_pointerが1つしかありません。 aunique_pointerであり、の参照bがそのポインタを指しています。

これはbを含むブロックが終了したときにunique_pointerが破壊されない理由です。 bbが最初にunique_pointerになることはなかったので、の参照を1つにしていたため、リソースを所有したことはありません。

learncppを参照してください。

3

bへの割り当ては単なる参考情報であり、オブジェクトの有効期間はaではありません。代わりにunique_ptr<int> &を取る関数に渡したとしたら、その場合には参照がそのライフタイムを変更するとは思わないでしょう、なぜここでそうするのですか?

関連する問題