我具有以下功能:

void MyLib::sendMessage(const std::string& message) {
  m_xIOService.post( boost::bind(&VoIPPhone::onSendMessage, this, message) );
}

void MyLib::onSendMessage(const std::string& message) {
  m_xVoIPClient.sendMessage(message);
}

因此,我在一个线程中调用sendMessage,并且onSendMessage将在主线程中调用。

问题是在这种情况下是否可以通过boost复制消息字符串。如果否-如何将字符串传递给onSendMessage函数,并确保没有内存泄漏和消息字符串有效,而不是删除的对象?

最佳答案

onSendMessage将在执行m_xIOService::run的线程之一中调用-而不是在主线程中。

所有bind参数都将被复制,因此message也将被复制。每当您希望通过引用传递bind参数时,请使用boost::ref包装器。

10-05 20:21