Перемещение std :: string в boost :: thread в C ++ 03

Я использую 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)?
Это возможно?

2

Решение

Если строка дорогая для копирования, передайте что-нибудь, удерживающее ее, но менее дорогую для копирования. Например, вы можете использовать shared_ptr<std::string>, Вы можете передать общий указатель на подходящую оболочку, которая вызывает функцию, которую вы на самом деле хотите вызвать (и, вероятно, берете аргумент по ссылке или const ссылка).

Чтобы получить строку в общий указатель, вам может понадобиться переместить ее туда:

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

Другие решения

Вы можете передать его как ссылку на конструктор и использовать конструктор move (или даже swap) «переместить» строку.

0