При перемещении std::unique_ptr
в лямбду невозможно вызвать метод reset()
для него, потому что тогда он выглядит как const:
error C2662: void std::unique_ptr<int,std::default_delete<_Ty>>::reset(int *) noexcept': cannot convert 'this' pointer from 'const std::unique_ptr<int,std::default_delete<_Ty>>' to 'std::unique_ptr<int,std::default_delete<_Ty>> &
#include <memory>
int main()
{
auto u = std::unique_ptr<int>();
auto l = [v = std::move(u)]{
v.reset(); // this doesn't compile
};
}
- Почему это происходит?
- Можно ли
std::unique_ptr
другим способом, который позволяет вызыватьreset()
внутри лямбды (с С++ 17 или новее)?