首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在std :: for_each中为一个lambda捕获std :: unique_ptr"by move"

在C++中,std::unique_ptr是一个独占所有权的智能指针,不能复制。要在std::for_each中将std::unique_ptr捕获到lambda中并移动,可以使用std::move函数将其转移为右值引用。

以下是一个示例代码:

代码语言:cpp
复制
#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::movestd::unique_ptr转移为右值引用。在lambda中,我们可以使用moved_ptr来访问std::unique_ptr的值。

请注意,在使用std::movestd::unique_ptr转移后,原始的std::unique_ptr将变为空,因此在lambda之外不能再使用它。如果需要在lambda之外使用std::unique_ptr,请确保在lambda中不会导致其被销毁。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券