c++11 bind注意

来源:互联网 发布:怎么取消差评淘宝 编辑:程序博客网 时间:2024/06/08 07:37

c++11及boost中bind函数如果是引用的话,由于闭包原因所以引用还是做的一个拷贝解决办法:

使用ref库

bind采用拷贝的方式保存绑定对象和参数,这意味着绑定表达式中的每一个变量都会有一份拷贝,如果函数对象或值参数很大、拷贝代价很高,或者无法拷贝,那么bind的使用就会受到限制。因此bind库可以搭配ref库使用,ref库包装了对象的引用,可以让bind存储对象引用的拷贝,从而降低了拷贝的代价。但这也带来了一个隐患,因为有时候bind的调用可能会延后很久,程序员必须保证bind被调用时引用是有效的。如果调用是引用的变量或者函数对象你被销毁了,那么将会发生未定义行为。ref配合bind用法的代码如下:

std::map<int> _map;void OnDo(std::map<int> & _map,int flag){   //.....do some thing}boost::thread thrd(boost::bind(&OnDo,boost::ref(_map), flag));//获取已分析的数据thrd.yield();//自动运行thrd.join();


0 0
原创粉丝点击