При перемещении std::unique_ptr
в лямбду невозможно набрать reset()
на ней, потому что тогда она кажется постоянной:
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()
внутри лямбды (с C ++ 17 или новее)?