3

我有以下功能:

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 函数并确保不会发生内存泄漏并且消息字符串是有效的,而不是删除的对象?

4

1 回答 1

6

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

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

于 2012-11-21T12:46:18.310 回答