【发布时间】:2011-12-20 08:48:03
【问题描述】:
//this returns a boost::ptr_vector<Ordre>
auto& vec = ptf.listeOrdre().liste();
auto it = std::find_if( vec.begin(), vec.end(),
[message](Ordre& ordre){return ordre.id() == message->id();}
);
if( it == vec.end())
{
return;
}
Ordre& ordre = *it;
我对应该在 lambda 参数和最后一行代码上使用的“&”或“*”有疑问。
有人看错了吗?
我在生产中遇到了崩溃,我怀疑这段代码
谢谢
【问题讨论】:
-
您不应该通过引用将消息传递给 Lambda 吗?
-
如果 ptr_vector 返回指针而不是引用,它根本不会编译。 - 也许
liste()返回一个对局部变量的引用? -
@mark:我不知道。为什么你认为我应该通过referenec 传递消息?
-
@visitor: 不,它是在堆上声明的类的字段
-
@Guillaume07 对不起,如果消息是一个秃头指针,你正在做的事情很好,如果它是一个共享指针,通过引用捕获它会更有效。