有人可以帮我解释为什么输出是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;
}
答案 0 :(得分:8)
您只有两个共享指针:x
和z
。
请注意,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
个对象来增加引用计数。