如果值永不更改,是否可以安全地同时从不同线程访问类成员而不使用互斥体?值是简单的指针,因此创建副本不会影响原始值。您可以假定B类本身是线程安全的。 A类可以具有其他成员,将使用互斥量同步访问它们。

class A {
public:
  A() { value = new B(); }

  // thread safe?
  B* get_value() { return value; }

private:
  B* value; //never changes

}

最佳答案

您有一个名为Afoo实例:

A foo;

您调用fooget_value()函数,并将结果存储在名为bar的变量中:
auto bar = foo.get_value();

这本身就很好,但是假设用户修改了bar指向的值?
*bar = B();

可以将bar中存储的地址复制到整个程序中。现在,所有这些副本都可以随时随地更改类BA指向的值。

10-07 16:27
查看更多