在使用带有 std::bind 的 std::function 升级到 XCode 5 后,似乎正在生成 EXC_BAD_ACCESS 异常。看起来好像 std::function 实现中的 __base 指针最终为空,导致访问错误,但我不清楚为什么会这样。有没有人了解我做错了什么?
这是说明问题的示例代码。
struct A
{
void foo(bool b)
{
std::cout << b << std::endl;
}
void go()
{
// ok
auto a = std::bind(&A::foo, this, std::placeholders::_1);
a(true);
// ok
std::function<void(A*, bool)> b = std::bind(&A::foo, std::placeholders::_1, std::placeholders::_2);
b(this, true);
// ok
std::function<void(A*, bool)> c = std::bind(&A::foo, this, std::placeholders::_2);
c(this, true);
// EXC_BAD_ACCESS
std::function<void(bool)> f = std::bind(&A::foo, this, std::placeholders::_1);
f(true);
}
};
...
...
A a;
a.go();