原始问题:
答案:
是的,前两个问题是准确的。 std::shared_ptr 的引用计数和析构函数调用是线程安全的。
第三个问题也是正确的。 std::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));
这是因为reset()不会影响其他线程对同一对象的引用。 d 是唯一指向新实例的共享指针,而其他引用(a、b 和 c)将仍然指向原始实例。
以上是std::shared_ptr 对于它管理的对象来说是线程安全的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!