Gus*_*avo 3 c++ lambda functor shared-ptr c++11
像这样的结构体旨在存储在 lambda 中:
struct MyStruct {
void testfunction() {
// Do something
}
};
Run Code Online (Sandbox Code Playgroud)
我想要的是从中构造一个共享指针并将该指针存储在 lambda 中:
auto ptr = std::make_shared<MyStruct>();
std::function<void()> caller = [ptr](){
ptr->testFunction();
}
Run Code Online (Sandbox Code Playgroud)
调用者对象被赋予一个函数并由该函数复制。对象ptr超出范围。当我传递调用者对象时,共享指针是否仍然存在?
是否保证ptr存储在 lambda 中,并且只要调用者存在或返回,该对象就由该指针管理?如果我不调用,是否有任何编译器优化testFunction?
这个问题特定于boost::asio我想使用异步处理程序传递一些对象的问题。
如果 lambda 表达式通过复制捕获任何内容(使用 capture 子句隐式捕获
[=]或使用不包含字符 & 的捕获显式捕获,例如[a, b, c]),则闭包类型包括以未指定顺序声明的未命名非静态数据成员,这些成员保存副本如此捕获的所有实体。
因此,根据as-if 规则,预计您的编译器将生成代码,其行为就像您确实拥有此副本一样,因此对象将保持活动状态。
| 归档时间: |
|
| 查看次数: |
632 次 |
| 最近记录: |