auto foo = getSharedPointer().get();
を関数は、参照でない型を返すたびに、関数の呼び出しの結果は右辺値です。また、関数getSharedPointer()
はクラス型を返すため、結果は一時オブジェクトになります。
一時オブジェクトの有効期間は、一番外側の式の評価の終了として定義されます。ここではgetSharedPointer().get()
です。 foo
変数が初期化されると、所有するスマートポインタは破棄されます。そのオブジェクトを所有している最後のshared_ptr
が破棄されると、そのオブジェクトは削除されます。
ここgetSharedPointer()
は常に、管理対象オブジェクト(use_count()
が1である)、最後shared_ptr
のそのコピーが破壊されたときに、オブジェクトが破壊され、オブジェクトへのポインタが無効ですさを共有していないshared_ptr
を返します。
(私はなぜあなたはshared_ptr
ではなく、ここでunique_ptr
に戻ってきていることを確認していない。)
「所有」というスマートポインタ、または任意のクラスの適切な使用(の寿命を制御)他のリソース(あなたが依然として直接アクセスすることができるリソース)は、あなたがressourceにアクセスする必要がある限り、 "smart"ポインタ/所有者を生かしておくことです。
「スマートな」ポインタ(所有オブジェクト)の名前を付ける必要があります。また、読者の視点から見ると、auto
というスマートなポインタであることを本当に隠そうとしているかどうかはわかりません。
std::shared_pointer<Bar> foo = getSharedPointer();
// use foo.get()
あなたは、管理対象オブジェクトの正確な型非表示にすることがあります。
std::shared_pointer<auto> foo = getSharedPointer();
は、標準ライブラリまたは共通の第三者に記載 'getSharedPointer'を見つけることができません。何が起こるかわからない。もう少し情報を追加することをお勧めします。 – user4581301