我在没有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
)?
这可能吗?
答案 0 :(得分:1)
如果要复制的字符串很昂贵,请传递一些东西,但要复制成本较低。例如,您可以使用shared_ptr<std::string>
。您可以将共享指针传递给合适的包装器,该包装器调用您实际想要调用的函数(并且可能通过引用或const
引用来获取参数)。
要将字符串转换为共享指针,您可能需要将其移动到那里:
shared_ptr<std::string> ptr(new std::string);
ptr->swap(your_long_string);
答案 1 :(得分:0)
您可以将其作为对构造函数的引用传递,并在构造函数中使用move
(或甚至swap
)来“移动”字符串。