我正在阅读http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html,但是对于我来说,一些线程安全性问题仍然不清楚:
- 标准保证引用计数是线程安全处理的,并且与平台无关,对吗?
- 相似的问题-标准保证只有一个线程(持有最后一个引用)会在共享库上调用delete,对吗?
- shared_ptr不能保证存储在其中的对象有任何线程安全吗?
编辑:
伪代码:
// Thread I
shared_ptr<A> a (new A (1));
// Thread II
shared_ptr<A> b (a);
// Thread III
shared_ptr<A> c (a);
// Thread IV
shared_ptr<A> d (a);
d.reset (new A (10));
在线程IV中调用reset()会删除在第一个线程中创建的A类的先前实例,并将其替换为新实例吗?此外,在IV线程中调用reset()之后,其他线程将仅看到新创建的对象吗?
make_shared
,而不是new