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);
}

したがって、1つのスレッドでsendMessageを呼び出すと、onSendMessageがメインスレッドで呼び出されます。

問題は、この場合、ブーストによってコピーされたメッセージ文字列であるかどうかです。いいえの場合-文字列をonSendMessage関数に渡して、メモリリークがなく、メッセージ文字列が有効であり、オブジェクトが削除されていないことを確認するにはどうすればよいですか?

4

1 に答える 1

6

onSendMessagem_xIOService::runメインスレッドではなく、実行するスレッドの1つで呼び出されます。

すべてのbind引数がコピーさmessageれるため、同様にコピーされます。bind参照によってパラメーターを渡したい場合は、boost::refラッパーを使用してください。

于 2012-11-21T12:46:18.310 に答える