boost::bind with functions that have parameters that are references

佐手、 提交于 2019-12-03 04:21:44
Timo Geusch

The boost documentation for bind suggests that you can use boost::ref and boost::cref for this.

I ran into similar issue expecting a bind parameter to be passed by reference whenever the method used in the bind was declared to take a reference parameter. However this is NOT the case! You will need to explicitly wrap the bind parameter (that is to be passed by reference) in a boost::ref() or boost::cref() regardless of how the method is declared.

Example:

ClassA myClassAParameter
void Method(ClassA &param);

now, the following binding:

callback = boost::bind(&Method, myClassAParameter);

will actually make a COPY of the ClassA object (which i understand it is a temporary allocation and the called method should not keep a reference to it since this is not the reference of the actual object but to a copy of the object).

however, the following binding:

callback = boost::bind(&Method, boost::ref(myClassAParameter));

will not make a copy, but use a reference to create the bind object.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!