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