指向相同资源的所有 shared_ptr 共享“引用计数管理区域”,并采用原子操作保证该区域中的引用计数值被互斥地访问。“引用计数管理区域”是指通过 new 创建的 sp_counted_impl_p<D> 或 sp_counted_impl_pd<D> 对象,在创建成功后立即由其基类指针指向它,而该基类指针被 shared_ptr 间接持有。类之间的关系为:

class A{};
int main(){
shared_ptr<A> sp1(new A()); //1
{
shared_ptr<A> sp2(sp1); //2
sp2.reset(); //3
}
}
1 通过 new 创建一个 A 对象,并将该对象交付给 shared_ptr 进行管理。sp1 在构造过程中,通过 new 创建了“引用计数管理区域”,对应下图中的 M 对象(M 指的是 sp_counted_impl_p<D> 或 sp_counted_impl_pd<D>)。M 对象中的数据成员 use_count_:int 正是对象 A 被引用的次数,即引用计数值。通过原子操作std::atomic_int保证 use_count_ 被互斥地访问。

本文详细解析了智能指针shared_ptr的工作原理,特别是其如何通过原子操作管理引用计数,确保资源的安全释放。在示例中,展示了shared_ptr在构造、拷贝及析构过程中的行为,包括引用计数的增加与减少,以及对象的生命周期管理。
最低0.47元/天 解锁文章

3万+

被折叠的 条评论
为什么被折叠?



