簡體   English   中英

在C ++ 03中將std :: string移動到boost :: thread

[英]Moving an std::string into a boost::thread in C++03

我在沒有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(可能通過boost::bind )? 這可能嗎?

如果要復制的字符串很昂貴,請傳遞保留它的東西,但復制則要便宜一些。 例如,您可以使用shared_ptr<std::string> 您可以將共享指針傳遞給合適的包裝器,該包裝器將調用您實際要調用的函數(並且可能通過引用或const引用獲取參數)。

要將字符串放入共享指針,您可能需要將其移動到此處:

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

您可以將其作為對構造函數的引用,並在構造函數中使用move (甚至swap )“移動”字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM