Я столкнулся с аналогичной проблемой, ожидая, что параметр привязки будет передан по ссылке всякий раз, когда метод, используемый в привязке, был объявлен как принимающий параметр ссылки. Тем не менее, это не так! Вам нужно будет явно заключить параметр привязки (который должен передаваться по ссылке) в boost :: ref () или boost :: cref () независимо от того, как объявлен метод.
Пример:
ClassA myClassAParameter
void Method(ClassA ¶m);
теперь следующая привязка:
callback = boost::bind(&Method, myClassAParameter);
фактически сделает КОПИЮ объекта ClassA (что, как я понимаю, это временное выделение, и вызываемый метод не должен сохранять ссылку на него, поскольку это ссылка не на фактический объект, а на копию объекта).
однако следующая привязка:
callback = boost::bind(&Method, boost::ref(myClassAParameter));
не будет делать копию, но будет использовать ссылку для создания объекта привязки.
person
DolphinDream
schedule
13.01.2014