У меня имеется 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>());
В обоих случаях копирования не происходит, потому что в обоих случаях вызывается перемещающий (move
) конструктор, создающий новый объект типа unique_ptr
, передающий ему владение ресурсом и помещающий nullptr
в умный указатель, передавший владение.
Таким образом, ресурс не копируется. Происходит лишь передача владения им.
Про семантику перемещения в общем можно почитать в книге "Эффективный и современный C++: 42 рекомендации по использованию C++11 и C++14" Скотта Мейерса.
С конструкторами же класса std::unique_ptr
можно ознакомиться на сайте cppreference.com.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как сделать чтоб поток переставал выполняться когда ЛКМ перестает быть зажата? Есть такой код:
Мне нужно вывести максимальное число из динамического массива, а как это сделать я понятия не имеюЦикл for не удобен
Уже задавал сегодня похожий вопросПроблему решили