std :: shared_ptr use_count()value

时间:2018-04-05 19:41:59

标签: c++ c++11

有人可以帮我解释为什么输出是2而不是3?谢谢。

int main()
{
    std::shared_ptr<int> x(new int);
    std::shared_ptr<int> const& y = x;
    std::shared_ptr<int> z = y;
    std::cout << x.use_count() << std::endl;
    return 0;
}

2 个答案:

答案 0 :(得分:8)

您只有两个共享指针:xz

请注意,y是一个变量,但不是一个对象。它的类型是引用类型,而不是对象类型。

(在C ++中,并非每个对象都是变量,并非每个变量都是对象。)

以下代码可能会说明y 持有所有权份额的方式:

std::shared_ptr<int> x(new int());

std::shared_ptr<int> const& y = x;
assert(y.use_count() != 0);

x.reset();

assert(y.use_count() == 0);

答案 1 :(得分:6)

这一行:

std::shared_ptr<int> const& y = x; //doesn't increase use_count()

y声明为x的引用。它就像是同一个对象的另一个名称。没有创建std::shared_ptr个对象来增加引用计数。