在C++中,std::unique_ptr
是一个独占所有权的智能指针,不能复制。要在std::for_each
中将std::unique_ptr
捕获到lambda中并移动,可以使用std::move
函数将其转移为右值引用。
以下是一个示例代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<memory>
int main() {
std::vector<std::unique_ptr<int>> vec;
vec.push_back(std::make_unique<int>(1));
vec.push_back(std::make_unique<int>(2));
vec.push_back(std::make_unique<int>(3));
std::for_each(vec.begin(), vec.end(), [](std::unique_ptr<int> &ptr) {
// 使用std::move将ptr转移为右值引用
std::unique_ptr<int> moved_ptr = std::move(ptr);
// 在这里使用moved_ptr
std::cout << *moved_ptr<< std::endl;
});
return 0;
}
在这个示例中,我们创建了一个std::vector
,其中包含三个std::unique_ptr<int>
。然后,我们使用std::for_each
遍历这个向量,并在lambda中使用std::move
将std::unique_ptr
转移为右值引用。在lambda中,我们可以使用moved_ptr
来访问std::unique_ptr
的值。
请注意,在使用std::move
将std::unique_ptr
转移后,原始的std::unique_ptr
将变为空,因此在lambda之外不能再使用它。如果需要在lambda之外使用std::unique_ptr
,请确保在lambda中不会导致其被销毁。
领取专属 10元无门槛券
手把手带您无忧上云