rvalue в параметр функции

57
04 марта 2022, 16:20

У меня имеется unique_ptr, который передаётся в функцию по значению.

void some_func(std::unique_ptr<some_class> ptr) {}

Почему когда я передаю rvalue (полученное из std::move()) оно корректно переносится в параметр? Где про это прочитать?

some_func(std::move(my_unique));

И почему, если я передаю туда же rvalue полученное через std::make_unique не происходит копирования? Это copy/move elision?

some_func(std::make_unique<some_class>());
Answer 1

В обоих случаях копирования не происходит, потому что в обоих случаях вызывается перемещающий (move) конструктор, создающий новый объект типа unique_ptr, передающий ему владение ресурсом и помещающий nullptr в умный указатель, передавший владение.

Таким образом, ресурс не копируется. Происходит лишь передача владения им.

Про семантику перемещения в общем можно почитать в книге "Эффективный и современный C++: 42 рекомендации по использованию C++11 и C++14" Скотта Мейерса.

С конструкторами же класса std::unique_ptr можно ознакомиться на сайте cppreference.com.

READ ALSO
Как остановить поток?

Как остановить поток?

Как сделать чтоб поток переставал выполняться когда ЛКМ перестает быть зажата? Есть такой код:

96
Есть ли альтернатива for?

Есть ли альтернатива for?

Мне нужно вывести максимальное число из динамического массива, а как это сделать я понятия не имеюЦикл for не удобен

104
Как сделать бесконечное нажатие лкм

Как сделать бесконечное нажатие лкм

Нужно нажать на лкм в той позиции в которой она находится

92
Заполнение свободного места в строке до конца строки

Заполнение свободного места в строке до конца строки

Уже задавал сегодня похожий вопросПроблему решили

93