在 lambda 中捕获 shared_ptr
Capture shared_ptr in lambda
我想在我的 lambda 表达式中捕获一个 shared_ptr。尝试了两种方法:
捕获共享指针
错误:无效使用非静态数据成员A::ptr
创建一个弱指针并捕获它(通过一些在线结果找到的)。我不确定我的做法是否正确
错误:“const class std::weak_ptr”没有名为“someFunction”的成员
在有人将其标记为重复之前,我知道它可能与其他一些问题类似,但 none 他们的解决方案似乎对我有用。想知道我做错了什么以及如何解决,这就是我来这里的原因。
file.h
#include "file2.h"
class A{
private:
uint doSomething();
std::shared_ptr<file2> ptr;
}
file.cpp
#include "file.h"
uint A::doSomething(){
...
// Tried using weak pointer
//std::weak_ptr<Z> Ptr = std::make_shared<Z>();
auto t1 = [ptr](){
auto value = ptr->someFunction;}
// auto t1 = [Ptr](){
// auto value = Ptr.someFunction;}
...
}
您不能直接捕获成员,您可以捕获 this
或使用初始化程序 (C++14) 捕获
auto t1 = [this](){ auto value = ptr->someFunction();};
auto t1 = [ptr=/*this->*/ptr](){ auto value = ptr->someFunction();};
最好改用weak_ptr。传递 this
指针是解决问题的技巧。这里提到原因:https://floating.io/2017/07/lambda-shared_ptr-memory-leak/
我想在我的 lambda 表达式中捕获一个 shared_ptr。尝试了两种方法:
捕获共享指针
错误:无效使用非静态数据成员A::ptr
创建一个弱指针并捕获它(通过一些在线结果找到的)。我不确定我的做法是否正确
错误:“const class std::weak_ptr”没有名为“someFunction”的成员
在有人将其标记为重复之前,我知道它可能与其他一些问题类似,但 none 他们的解决方案似乎对我有用。想知道我做错了什么以及如何解决,这就是我来这里的原因。
file.h
#include "file2.h"
class A{
private:
uint doSomething();
std::shared_ptr<file2> ptr;
}
file.cpp
#include "file.h"
uint A::doSomething(){
...
// Tried using weak pointer
//std::weak_ptr<Z> Ptr = std::make_shared<Z>();
auto t1 = [ptr](){
auto value = ptr->someFunction;}
// auto t1 = [Ptr](){
// auto value = Ptr.someFunction;}
...
}
您不能直接捕获成员,您可以捕获 this
或使用初始化程序 (C++14) 捕获
auto t1 = [this](){ auto value = ptr->someFunction();};
auto t1 = [ptr=/*this->*/ptr](){ auto value = ptr->someFunction();};
最好改用weak_ptr。传递 this
指针是解决问题的技巧。这里提到原因:https://floating.io/2017/07/lambda-shared_ptr-memory-leak/