2

C++ 11 を使用せずに、複数のプラットフォームとコンパイラでブースト 1.51 を使用しています。

私のメインスレッドには、std::string veryLongString処理のために新しいスレッドに渡す必要がある非常に長く、コピーにコストがかかる があります。
新しいスレッドが作成された後、メイン スレッドを使用する必要がなくなったので、それをctor に移動veryLongStringしたいと思います。 メイン スレッド、または のスコープは、新しいスレッドが完了する前に終了する可能性があるため、参照渡し (たとえば、 を使用) はオプションではありません。boost::thread
veryLongStringboost::ref

明らかに、veryLongStringとして作成された場合、 をスレッド ctor にshared_ptr<std::string>コピーできますが、そうではなかったので、とにかくコピーする必要があります。shared_ptr

[boost::]move() veryLongStringctor にアクセスするにはどうすればよいですかboost::thread(おそらく via を使用boost::bind)。これは可能ですか?

4

2 に答える 2

1

文字列のコピーにコストがかかる場合は、文字列を保持しているがコピーにコストがかからないものを渡します。たとえば、 を使用できますshared_ptr<std::string>。共有ポインターを、実際に呼び出したい関数を呼び出す適切なラッパーに渡すことができます (おそらく参照またはconst参照によって引数を取ります)。

文字列を共有ポインタに入れるには、そこに移動する必要があるかもしれません:

shared_ptr<std::string> ptr(new std::string);
ptr->swap(your_long_string);
于 2012-10-04T09:56:50.543 に答える
0

それをコンストラクターへの参照として渡し、コンストラクターでmove(またはswap) を使用して文字列を「移動」することができます。

于 2012-10-04T09:55:40.027 に答える