Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
45 / 25 / 16
Регистрация: 14.04.2011
Сообщений: 623

Std::move что за зверь?

30.08.2018, 10:06. Показов 2186. Ответов 3

Студворк — интернет-сервис помощи студентам
Есть код Acceptor'a:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void SocketWorker::doAccept()
{
    mAcceptor.async_accept(mSocket, [this](boost::system::error_code ec)
    {
        if (!ec && getWorkStatus())
        {
            //auto socket = std::move(mSocket);
            /*auto session = std::make_shared<SocketSession>(std::move(mSocket));
            { // Mutex work..
                std::unique_lock<std::shared_mutex> lock(mMutexSessions);
                mSessions.push_back(session);
            }
            session->Start();*/
        }
        else
            printf("[SocketWorker] Can't Accept..[%d]\n\r\r%s\n", ec.value(), ec.message());
 
        if (getWorkStatus())
            doAccept();
    });
}
если не выполнить в этом коде:
C++
1
std::move(mSocket);
То следующий вызов async_accept (и все остальные следующие) завершится с error_code: operation_not_permitted (EPERM)

Я так понимаю что при успешном Accept, mSocket принимает remote_endpoint и последующий вызов Accept будет уже не на серверный Socket, а на Socket последнего присоединившегося клиента.
Тогда что за магию делает std::move(..); ??
mSocket определен в классе и в конструкторе принимает boost::asio::io_service
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.08.2018, 10:06
Ответы с готовыми решениями:

Применение std::move к локальной переменной при возврате из функции
Response HostHandler::notFound() const { Response resp; resp.status = 404; return std::move(resp); } Имеет ли это...

Что под капотом std::mutex
Собственно сабж. Под виндой это сделано на основе критической секции или через мьютекс как объект ядра? Ну и в добавок - под линем...

Не могу разобраться как обновить в std::map<std::string, вектор_структур>
Не могу разобраться как обновить вектор структур после его добавления в map без удаления и перезаписи struct pStruct { int...

3
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
30.08.2018, 11:08
Лучший ответ Сообщение было отмечено Путин как решение

Решение

Приводит mSocket к rvalue reference (&&), чем триггерит срабатывание семантики перемещения (срабатывает оператор перемещающего присваивания).
Цитата Сообщение от Путин Посмотреть сообщение
auto socket = std::move(mSocket);
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
03.09.2018, 19:33
Цитата Сообщение от Peoples Посмотреть сообщение
срабатывает оператор перемещающего присваивания
Конструктор. Это же инициализация.
3
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
03.09.2018, 19:52

Не по теме:

Croessmah, Вижу равно значит присвоение:D


Не подумал, что там инициализация, извиняюсь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.09.2018, 19:52
Помогаю со студенческими работами здесь

std::string, std::fstream, ошибка кучи
где то начало вылетать при операции += с локальной переменной std::string. Заменил на свой qString. Замечательно, то же самое... ошибка при...

Vector::swap и std::move - что эффективнее?
Пусть имеется пустой вектор A и заполненный некими данными вектор B. Тогда какой из методов более эффективный: A.swap(B); A =...

Что происходит когда std::move применяется для int?
Мне, вроде бы, понятно как работает std::move() на классах типа string. Но мне непонятно что будет в данном случаи. #include...

std::move()
Есть ли разница между следующими вещами: A = std::move(B); // and std::copy(B.begin(), B.end(), A.begin()); B.clear();

Std::move
Добрый вечер, #include &lt;iostream&gt; using namespace std; class A { private: int x = 10; public: A(int q){ x = q; }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru