考虑这样的(简化)函数:
void foo(const Bar& bar)
{
const auto fun = [&] () { some_other_api(bar); };
put_somewhere(fun);
}
这很好用,直到其他API被重构,现在需要一个shared_ptr。开发人员运行所有编译器错误并将foo更改为:
void foo(std::shared_ptr<const Bar> bar)
{
const auto fun = [&] () { some_other_api(bar); };
put_somewhere(fun);
}
BAAAMM应用程序段错误(希望在测试期间)。现在,如果没有编译器的支持,很难找到所有的地方。
这里的问题是通过引用捕获所有变量通常在有许多变量和大函数的地方完成,因此这个反模式很容易被忽略。如果像这样捕获共享指针,有没有办法强制执行警告?