避免使用默认捕获模式
两种默认模式:引用和按值
按引用捕获会导致空悬行为,如果使用,请保证引用变量的生命周期与lambda的生命周期一致。
vector<std::function<bool(int)>> filters;
void AddDivisorFilter(){
auto divisor = GetDivisor();
filters.emplace_back([&](int num){
return num % divisor == 0})//对divisor的指涉可能空悬!
}
按值捕获要注意如果捕获到指针(类的this指针)也会导致空悬行为, 捕获只能在创建lambda式的作用域内可见的非静态局部变量(包括形参)。
class widget{
public:
...
void addFilter() const;
void addFilter1