gpt4 book ai didi

c++ - boost named_mutex 私有(private)成员访问错误

转载 作者:行者123 更新时间:2023-11-30 03:43:58 25 4
gpt4 key购买 nike

我遇到了一个问题,我需要一个 named_mutex 用于类中的 managed_shared_memory 成员,并收到“无法访问类 boost::interprocess::named_mutex 中声明的私有(private)成员”错误。但是,我都从 boost::noncpoyable 派生了我的类,并在构造函数中使用了带有移动语义的 std::unique_ptr,但没有成功。使用 boost 1_60 和 VS 2010,代码如下:

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-Threads,但他们都指出了我处理过的不可复制性......

感谢您的帮助!

最佳答案

撇开其他问题不谈,您在两个地方错误地调用了 named_mutex 构造函数。

其中一个在这里:

m_oShMem.find_or_construct<named_mutex>("viVideoFileInOutMutex")()

您传递的字符串参数是共享内存中对象的名称,但它不会传递给实际对象的构造函数,在本例中为 named_mutex。所以这基本上会导致调用 named_mutex 的默认构造函数,它是私有(private)的。要将参数传递给基础对象的构造函数,您必须像这样发送它们:

m_oShMem.find_or_construct<named_mutex>("viVideoFileInOutMutex")(open_or_create, "named_mutex_name")

在第二组括号中。

第二个问题从同一行开始:

m_oSetFileMutex = make_unique<named_mutex>( m_oShMem.find_or_construct<named_mutex>("viVideoFileInOutMutex")(open_or_create, "named_mutex_name") );

这基本上等同于:

named_mutex *temp = m_oShMem.find_or_construct<named_mutex>("viVideoFileInOutMutex")(open_or_create, "named_mutex_name") );
m_oSetFileMutex = make_unique<named_mutex>(temp);

您已经有一个指向 named_mutex 的原始指针,您正在将其传递给 make_unique。这导致 make_unique 调用 named_mutex 的构造函数,将 named_mutex* 作为参数。这样的构造函数不存在。

关于c++ - boost named_mutex 私有(private)成员访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35796156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com