将 std::unique_ptr
移入 lambda 后,无法调用 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,使得在lambda函数内部可以调用reset()(使用C++17或更高版本)?
v
不会自动重置吗? - L. F.const
指针。然而,如果指针的生命周期需要在作用域结束之前结束(或者需要分配另一个指针或将托管对象的所有权转移给另一个unique_ptr),则需要一个非const unique_ptr。 - Roi Danton