使用私有成员提升互斥锁奇怪错误

时间:2012-02-14 21:22:05

标签: c++ boost

我有一个奇怪的错误。

class INST
{
public:
boost::mutex m_mutex;
};

std::vector<INST> m_inst;

错误C2248:'boost :: mutex :: mutex':无法访问类'boost :: mutex'中声明的私有成员 看到'boost :: mutex :: mutex'的声明

但是,我的其他课很好,

class VIEW
{
public:
boost::mutex m_mutex;
};

VIEW m_view;

我在这里遗漏了什么吗?我试图将m_mutex声明为private,但仍然存在同样的问题。

感谢。

2 个答案:

答案 0 :(得分:18)

互斥锁不能是copied,因此您无法将它们放在可复制互斥锁的容器中。该错误可能是指互斥锁的私有拷贝构造函数。

答案 1 :(得分:2)

我意识到这个问题真的很老了,但我今天早些时候偶然发现了同样的问题,谷歌把我带到了这里。但是,提出的解决方案并不适合我,所以我想描述一下我是如何在自己的项目中解决它的。

我有一个类似于你的类向量,我以这样的方式管理它们,这样一旦访问向量的成员开始,向量将永远不会再次调整大小。我确实希望能够在开始之前在开始时调整矢量大小几次。我还想让线程以随机访问方式对向量中的任何项进行操作。

我通过在类的构造函数中动态分配它并在析构函数中销毁它来解决mutex的问题。当然,如果这样做,您必须保证在删除互斥锁时没有人在等待互斥锁。这个解决方案对我有用,因为我永远不会从向量中复制对象,我只能在容器内部访问它们。