2

我在没有 C++11 的多个平台和编译器上使用 boost 1.51。

在我的主线程中,我有一个非常长且昂贵的复制,std::string veryLongString我需要将其传递给一个新线程进行处理。
创建新线程后,我不再使用veryLongString主线程,所以我想它移到boost::threadctor中。
主线程或 的范围veryLongString可能在新线程完成之前结束,因此通过引用传递(例如 with boost::ref)不是一种选择。

显然,如果veryLongString创建为 ashared_ptr<std::string>那么我可以将其复制shared_ptr到线程 ctor 中,但事实并非如此,所以无论如何我都需要复制它。

我怎样才能[boost::]move() veryLongString进入boost::threadctor (可能使用 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 回答