引用 shared_pointer 的引用计数

Reference count for a reference to shared_pointer

我了解到 shared_ptr class 自动管理动态对象。

在这里,我有一个函数 f,它 return 是一个 const shared_ptr<int> 到一个 int 2

我有两个版本的 main,只有一处不同。版本 A 将 f 的 return 值保存到 共享指针 中,而版本 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。我对版本 A 没问题,因为 p 是指向 int 的最后一个 shared_ptr,因此 use_count1

问题:为什么版本 B 的 use_count 等于 1?最后一个 shared_ptr 在哪里?

在 C++ 中,如果您将临时对象直接分配给 &&const&,引用生命周期延长就会生效,并且临时对象的持续时间与引用一样长。

这仅在您的引用是局部变量时有效1


1 或者在某些情况下,在某些编译器中,您使用 structs 的聚合构造。但是不要使用它,因为它是 "transparent" 转发构造函数的行为与聚合根本不同的地方之一,因此以后无害的更改可能会破坏您的代码。