按值返回由互斥锁保护的shared_ptr是否安全?

aby*_*s.7 4 c++ gcc shared-ptr

这是一个代码示例:

class A {
  boost::mutex a_mutex;
  boost::shared_ptr<int> a;

  boost::shared_ptr<int> clone_a(void) {
    boost::lock_guard<boost::mutex> lock(a_mutex);
    return a;
  }
};
Run Code Online (Sandbox Code Playgroud)

建议尽管编译器优化,但boost::shared_ptr复制构造函数调用A::a将在boost::lock_guard析构函数调用之前.所以,打电话安全A::clone_a()吗?

jpa*_*cek 5

如果"安全"意味着你不会参加数据竞赛a,那么是的.就像你说的那样.

但是,正如您可能知道的那样,它不会保护对*a(或*clone_a())的进一步访问.我不确定,为什么这个方法称为"克隆",因为它没有克隆任何东西.