【 在 namelij 的大作中提到: 】
: 嗯,我知道你的意思
: 线程A中,pt.reset(),其引用计数变成0,然后准备删除该对象
: 线程B中,引用计数++(这个操作是在线程A变成0和删除对象之间)
问题是你给线程B是怎么传递这个ptr的(也就是B是怎么得到这个ptr的)?你传递的时候如果是用引用,就会有这个问题,如果不是引用,就没有问题。
假定如下场景:
1. 线程A把 ptr 传递给线程B, 然后线程A reset,此时B线程已经把引用计数+1,A去reset 不会导致对象被删除。
2. 线程A 把 ptr 传递给线程C,自己reset, C再把ptr传递给B,ptr传递给C的时候,引用计数也已+1,A去reset 不会导致对象被删除。
你要理解一点:一个shared_ptr 只要你不是用传引用的方式,传递必然导致引用技术+1,因为传递者本身也持有一个引用计数,所以你说的那种情况肯定不会出现。
--
FROM 218.76.62.*