在st ++ 03中将std :: string移动到boost :: thread中

时间:2012-10-04 09:16:59

标签: c++ boost boost-thread stdstring boost-move

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

在我的主线程中,我需要花费很长时间才能复制std::string veryLongString,我需要传递给新线程进行处理。
创建新线程后,我在主线程上不再使用veryLongString,因此我希望移动到boost::thread ctor。
主线程或veryLongString的范围可能在新线程完成之前结束,因此通过引用传递(例如使用boost::ref)不是一种选择。

显然,如果将veryLongString创建为shared_ptr<std::string>,那么我可以将shared_ptr复制到主题ctor中,但它不是,所以我不知道无论如何都需要复制它。

我如何[boost::]move() veryLongString加入boost::thread ctor(可能使用via boost::bind)? 这可能吗?

2 个答案:

答案 0 :(得分:1)

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

要将字符串转换为共享指针,您可能需要将其移动到那里:

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

答案 1 :(得分:0)

您可以将其作为对构造函数的引用传递,并在构造函数中使用move(或甚至swap)来“移动”字符串。