【 在 namelij 的大作中提到: 】
: shared_ptr是线程安全的,指的是shared_ptr本身,而不包括其所指向的对象
: 我现在有个疑问,有一个shared_ptr<T> pt = make_shared<T>();
: 在线程A中使用,在线程A中出其作用域的时候,判断其引用计数为0,则准备释放
: ...................
1,reset()只是把当前的shared_ptr置空,不会把底层的资源释放。说白了只是-1而已。
2, 如果pt是作为传值的方式从A传到B的话,不会有任何问题,因为你在A里面reset()只是reset了pt本身。 必须注意的是,这时候B持有的是pt的copy,B里面的pt的copy仍然指向最初的对象,只不过 -1 了而已。
3, 如果pt是作为引用传给B的话,那就是你程序逻辑错误了。 这时候本质上A和B都持有同一个pt对象。 你把pt在A reset后, B里面的pt必然也被reset了。
4, 9楼也说了,“shared_ptr做为一个类本身不是线程安全的”。或者说单独的一个shared_ptr object被不同的线程访问 不 是线程安全的。 多个指向同一个资源的shared_ptr objects是线程安全的。
5, 如果纠结初始化/赋值的话,shared_ptr不是线程安全的,需要使用atomic_load/store。
--
FROM 1.91.32.*