#include <functional>
#include <iostream>
class Test
{
public:
void blah() { std::cout << "BLAH!" << std::endl; }
};
int main()
{
// store the member function of an object:
Test test;
std::function< void() > callback = std::bind( &Test::blah, test );
callback();
// .....
}
上面这段代码里,对象test的一个成员函数被绑定到callback这个std::function对象上,如果我把这个callback存在别处,直到test对象销毁了,调用callback不会coredump么?test 的生命周期是和 callback 绑定的么(这样可以保证callback有效,毕竟是和test的成员函数绑定的)?
std::bind
会对入参进行拷贝或者移动The arguments to bind are copied or moved, and are never passed by reference unless wrapped in std::ref or std::cref.
如果需要保持
Test
对象与callback
生命周期一致,可以考虑用move
(省略一次拷贝开销)或者unique_ptr
或者shared_ptr