在 C++03 中将 std::string 移动到 boost::线程中



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

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

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

如何[boost::]move() veryLongString进入boost::thread ctor(可能通过 boost::bind 使用)?这可能吗?

如果复制字符串的成本很高,则传递保存它但复制成本较低的内容。例如,您可以使用shared_ptr<std::string> 。您可以将共享指针传递给合适的包装器,该包装器调用您实际想要调用的函数(并且可能通过引用或const引用获取参数)。

要将字符串放入共享指针中,您可能需要将其移动到那里:

shared_ptr<std::string> ptr(new std::string);
ptr->swap(your_long_string);

你可以把它作为对构造函数的引用传递,并在构造函数中使用move(甚至swap)来"移动"字符串。

最新更新