gpt4 book ai didi

c++ - 将新的 shared_pt 对象分配给 a[1] , a[1] 中包含的原始对象的引用计数减少。如何?

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:35 24 4
gpt4 key购买 nike

在下面的代码中,a[1] 首先指向 p1,然后被赋予一个新值 p3。 p1 指向的对象的引用计数减少到 1,这是正确的行为。但我就是不明白它是如何实现的。它是由编译器完成的吗?

int main()
{
{
cout << "1" << endl;
std::tr1::shared_ptr<C>p0(new C(0));
std::tr1::shared_ptr<C>p1(new C(1));

std::tr1::shared_ptr<C> a[2];
a[0]=p0;
a[1]=p1;

{
cout << "p1 count" << p1.use_count() << endl; // print 2
std::tr1::shared_ptr<C>p3(new C(3));
//p1 reference count decreased. how is it impelmented?
a[1] = p3;
cout << "p1 count" << p1.use_count() << endl; // print 1
}

}
}

最佳答案

表达式 a[1] = p3 调用 shared_ptr 的赋值运算符。该赋值运算符将首先递减当前引用对象的引用计数器,然后递增新引用对象的引用计数器。

引用计数器通常与引用对象一起存储,而不是与引用智能指针一起存储。

关于c++ - 将新的 shared_pt 对象分配给 a[1] , a[1] 中包含的原始对象的引用计数减少。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21827977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com