使用唯一指针在 Lambda 中保留所有权
在 C 中,unique_ptr 旨在专门管理单个对象的所有权。当尝试将 unique_ptr 捕获到 lambda 表达式中时,所有权可能会变得不明确。以下是解决此问题的方法:
最初,尝试捕获 unique_ptr 作为 lambda 中的引用可能会无法编译。为了显式地将所有权转移给 lambda,C 14 引入了 lambda 广义捕获:
auto getAction = [](std::unique_ptr<MyClass> psomething) { // Ownership now belongs to the lambda return [a = std::move(psomething)]() { a->do_something(); // psomething is released after this point }; };
通过复制和移动实现进行所有权转移:
在更新的代码中,您定义了复制和移动函数来处理不同类型的引用。为了确保正确的所有权转移,请考虑以下事项:
通过这些修改,您的代码应该按预期工作,保留所有权lambda 表达式。
以上是如何正确地将 `unique_ptr` 的所有权转移到 C 中的 Lambda ?的详细内容。更多信息请关注PHP中文网其他相关文章!