将方法与对象指针绑定,然后删除对象,该方法仍然是可调用的。
struct A {
void b(){std::cout << "SUHDU" << std::endl;}
};
int main(int argc, const char * argv[])
{
A *a = new A;
auto f1 = std::bind(&A::b, a);
auto f2 = std::bind(&A::b, std::ref(a));
f1();
f2();
delete a;
f1(); // still outputs SUHDU
f2(); // still outputs SUHDU
}
为什么std::bind
会有这种行为,它是如何做到的?