У меня возникла проблема с тем, что мне нужен named_mutex для члена managed_shared_memory внутри класса и получить сообщение «невозможно получить доступ к закрытому члену, объявленному в классе boost :: interprocess :: named_mutex». Тем не менее, я оба получил свой класс из boost :: noncpoyable и использовал std :: unique_ptr с move-semantic в конструкторе без успеха. Использование наддува 1_60 и VS 2010, код следующим образом:boost named_mutex ошибка доступа к частному члену
class FileLocker : private boost::noncopyable
{
public:
FileLocker();
~FileLocker();
private:
boost::interprocess::managed_shared_memory m_oShMem;
std::unique_ptr<boost::interprocess::named_mutex> m_oSetFileMutex;
};
CPP-файл:
FileLocker::FileLocker()
{
m_oShMem = managed_shared_memory(open_or_create, m_oMemName.c_str(), 1024);
m_oSetFileMutex = make_unique<named_mutex>(m_oShMem.find_or_construct<named_mutex>("viVideoFileInOutMutex")());
}
и, наконец, сделать уникальный:
template<typename T>
std::unique_ptr<T> make_unique()
{
return std::unique_ptr<T>(new T());
}
template<typename T, typename Ts>
std::unique_ptr<T> make_unique(Ts&& params)
{
return std::unique_ptr<T>(new T(std::forward<Ts>(params)));
}
Я прочитал несколько StackOverflow-темы, касающиеся этой проблемы , но все они указывают на несовместимость, с которыми я работал ...
Спасибо за помощь!
Ах. Я даже не видел находки или конструкции. Вероятно, это поможет OP определить недостающий бит. +1 – sehe
Большое спасибо за эту информацию, я попробую это, как только вернусь к проблеме (понедельник)! – gilgamash
Несмотря на то, что вы поместили имя мьютекса в разделяемое место, ваш ответ был абсолютно правильным и помог решить проблему. Благодаря! – gilgamash