我正在阅读http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html,但有些线程安全问题对我来说还不太清楚:
- 标准保证引用计数是线程安全的,并且与平台无关,对吗?
- 类似的问题 - 标准保证只有一个线程(持有最后一个引用)会调用共享对象的删除操作,对吗?
- 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
。 - qdii