shared_ptr销毁时引用计数与自定义删除器的执行顺序及计数值疑问
问题1:引用计数是在自定义删除器执行之前还是之后递减?
- 引用计数先递减,只有当递减后的计数变为0时,才会触发自定义删除器的执行。
问题2:带有自定义删除器的shared_ptr销毁时,删除器执行过程中引用计数是1还是0?是否有C++标准保证?
- 执行删除器的过程中,引用计数已经是0。
- 这是有C标准明确保证的:从C11开始,
shared_ptr的析构逻辑被标准化——当shared_ptr对象被销毁时,首先将关联的引用计数原子减1;若减后计数为0,则调用对应的删除器来销毁托管对象。也就是说,删除器的调用时机是在计数已经降到0之后,因此执行删除器时计数必然是0。
内容的提问来源于stack exchange,提问作者NPS
相关产品推荐
相关产品推荐

