Когда использовать std :: swap для типов потоков?

Пытаюсь дать ответ на этот вопрос текстовый файл обработки в-с давая ссылки на cplusplus.com. Я наткнулся на std::swap-функция для потоковых типов, таких как fstream,

Итак, мой вопрос:
Что именно является целью функции свопинга, например, для «потока», соответственно, в какой ситуации я должен его использовать?

Ссылка на Q& C ++ std :: ifstream в задаче конструктора Я знаю, что типы потоков не подлежат копированию. Ссылка на вопрос& Что такое идиома копирования и обмена? функциональность свопа, например, дано реализовать copy-конструктор, …. Так и типы потоков, имеющие swapping-функция теперь копируется с swap-feature -> Если так, как разработчики языка достигли этого?

0

Решение

Ну, неудивительно, что вы используете std::swap для потоков, когда вы хотите обменяться потоками. Вы можете, например, использовать это для std::remove_if все «плохие» потоки из вектора потоков (хорошо, это, вероятно, не лучший пример. Я не могу придумать лучший из моих голов).

Что касается того, как это работает: Начиная с C ++ 11, стандартные потоки конструируются с возможностью перемещения и назначаются с возможностью перемещения. Поэтому, хотя вы все еще не можете скопировать их, вы можете поменять их с помощью общей функции подкачки, например:

template <class T>
void swap (T &a, T &b) {
auto temp = std::move(a);
a = std::move(b);
b = std::move(temp);
}

Теперь наши потоки меняются местами без необходимости их копирования.

Кстати, обмен потоков не делает их копируемыми. Когда вы смотрите пример оператора копирования назначения

MyClass& operator=(const MyClass& other)
{
MyClass tmp(other);
swap(tmp);
return *this;
}

из вопроса, который вы связали, вы заметите эту строку:

MyClass tmp(other);

который требует конструктора копирования, чего нет у потоков.

1

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


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector