为什么这段代码有效?
// Online C compiler to run C program online
#include <cstdio>
#include <vector>
#include <functional>
#include <memory>
#include <iostream>
using FilterContainer = std::vector<std::function<bool(int)>>;
FilterContainer filters;
class Widget
{
public:
int divisor = 0;
void addFilter() const;
Widget(int a):divisor(a){}
};
void Widget::addFilter() const
{
auto divisorCopy = divisor;
filters.emplace_back(
[=](int value)
{ return value % divisorCopy == 0; }
);
}
void doSomeWork()
{
auto pw = std::make_unique<Widget>(5);
pw->addFilter();
}
int main() {
doSomeWork();
std::cout<< filters[0](10);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
doSomeWork()之后对象widget被删除了,那么为什么divisorCopy中divisor仍然复制成功呢?当执行过滤器中的函数时,除数应该不存在。