use*_*183 0 c++ language-lawyer stdbind
是否定义了以下代码的行为?f()通话如何表现?
#include <functional>
#include <iostream>
struct A
{
void shout()
{
std::cout <<"shout";
}
};
int main()
{
std::function<void()> f;
{
A a;
f = std::bind(&A::shout, &a);
}
f(); // what happens here?
}
Run Code Online (Sandbox Code Playgroud)
您的代码最终在函数包装器中存储悬空引用(对于不再存在的对象),并且调用该函数会导致未定义的行为.
如果原始对象的存活时间与包装器不同,则始终可以在包装器中存储该对象的副本:
f = std::bind(&A::shout, a);
// ^^^ copy
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |