当我使用C++ 11 lambda表达式时,如何通过值捕获成员变量?捕获成员变量值
使用[my_member]
语法似乎不起作用,并且隐式捕获使用this
指针。需要什么是显式指定捕获类型的成员变量的一种方法。那可能吗?
我解决方法现在是:
void member_function()
{
std::shared_ptr<my_member_class> my_member_copy = my_member; // this shouldn't be necessary
std::async([=]{ std::cout << *my_member_copy; });
// std::async([=]{ std::cout << *my_member_; }); // wrong, my member could be potentially out of scope
}
我需要按值进行捕获,以便将shared_ptr引用计数递增。否则,在父对象被销毁时对象将被销毁,从而在异步操作中导致潜在的访问冲突。 (忘了在lambda中添加*)。 我不明白你的例子与我的不同。 – ronag 2010-09-15 14:41:31
“不知道什么类型的成员是这样的应该工作:”,我写std :: shared_ptr而不是auto的原因是明确“my_member”的类型,即shared_ptr。 –
ronag
2010-09-15 15:39:48