次のコードスニペットでは、メソッドの参照カウントが異なります。誰かがこれらの値が異なる理由を説明できますか?なぜconst shared_ptr <const T>&const shared_ptr <T>&異なる参照カウントを表示するのですか?
class Foo {
};
void f1(const std::shared_ptr<Foo>& ptr) {
std::cout << "f1(): counts: " << ptr.use_count() << std::endl;
}
void f2(const std::shared_ptr<const Foo>& ptr) {
std::cout << "f2(): counts: " << ptr.use_count() << std::endl;
}
int main() {
std::shared_ptr<Foo> ptr(new Foo);
std::cout << "main(): counts: " << ptr.use_count() << std::endl;
f1(ptr);
f2(ptr);
std::cout << "main(): counts: " << ptr.use_count() << std::endl;
return 0;
}
対応する出力:
main(): counts: 1
f1(): counts: 1
f2(): counts: 2
main(): counts: 1
f2呼び出しは、shared_ptrからshared_ptr への変換の一部として暗黙的な一時オブジェクトを作成しなければならない可能性があります。これは、f2が実行されているときの第2の参照カウントです。 –
ありがとう!意味をなさない –
全く関係ありません、単にFYI: 'new'の代わりに' make_shared'を使うべきです(https://herbsutter.com/2013/05/29/gotw-89-solution-smart-pointers/) – Tas