我在多个平台和编译器上使用 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
)来"移动"字符串。