【发布时间】:2012-03-18 00:37:39
【问题描述】:
我需要保护对我班级中的数据结构的访问。由于我不能拥有互斥锁(因为我无法复制它),我正在考虑拥有 shared_ptr 并将互斥锁保留在那里。这是我的想法的示例代码:
class Sample {
typedef boost::lock_guard<boost::mutex> AcquireLock;
boost::shared_ptr<boost::mutex> mutt;
public:
Sample() : mutt(new boost::mutex) {}
void Method()
{
AcquireLock lock(*mutt);
//do some work here
}
};
我有以下问题:
- 以这种方式使用互斥锁(作为类成员,通过 shared_ptr)是一种不好的做法吗?
- 我是否应该为这个类设置复制构造函数,因为它通过 shared_ptr 在堆上分配了内存?
编辑:也许我需要提供更多细节: 我将只创建一次此对象并将其保存在 std::vector 中。我不需要复制它,如果向量需要复制,我不希望每个副本都有不同的互斥锁。这就是为什么我认为复制构造函数对我有用。
【问题讨论】:
标签: c++ boost mutex shared-ptr copy-constructor