0
shared_ptr
クラスは動的オブジェクトを自動的に管理することを理解します。shared_pointerへの参照の参照カウント
ここでは、const shared_ptr<int>
をint 2
に返す関数f
があります。
main
の2つのバージョンが1か所で異なります。バージョンAは、の戻り値をにに保存し、バージョンBはにを保存します。
using namespace std;
const std::shared_ptr<int> f() {
const std::shared_ptr<int> ret = std::make_shared<int>(2);
return ret;
}
int main() {
const std::shared_ptr<int> p = f(); // A
// const std::shared_ptr<int> &p = f(); // B
cout << p.use_count() << *p << endl; // prints 1 2
return 0;
}
両方のバージョンが1 2
と印刷されます。 p
がを指す最後のshared_ptr
であるため、use_count
が1
であるため、バージョンAでは問題ありません。
質問:バージョンBではuse_count
が1
と等しいのはなぜですか?最後に存在するのはどこですか?shared_ptr
?
'std :: shared_ptr'の参照カウントは、参照ではなくインスタンスに適用されます。 –
@πάνταῥεῖありがとうございました。バージョンAの場合、インスタンスは 'p'ですか?既存のインスタンスであるバージョンBでは、 'f()'の戻り値ですか?たぶん、私はオブジェクトのエイリアスだと思っていた参照を完全に理解していないかもしれません。 – sam
一時的な有効期間はconst参照で拡張されます。 – Jarod42