Я использую boost 1.51 на нескольких платформах и компиляторах без C ++ 11.
У меня в главной теме очень длинный, дорогой для копирования, std::string
veryLongString
, что мне нужно перейти на новый поток для обработки.
После создания новой темы у меня больше нет пользы для veryLongString
в основной теме, поэтому я хотел бы переехать это в boost::thread
т е р.
Основная тема или сфера 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
) «переместить» строку.