Копирует ли boost:: bind() параметры по ссылке или по значению?
почему инструмент DRD valgrind жалуется " конфликтующая нагрузка по потоку ... при размере 4": о таком коде:
void SomeFunction(const int& value)
{
boost::bind(..., value); /* <-- complaines on this line
with last backtrace function "new(int)" */
}
сохраняет ли boost:: bind() значения по ссылке или значению?
1 ответов
по значению. 1
но вы можете сделать это копировать по ref вместо:
void SomeFunction(const int& value)
{
boost::bind(..., boost::ref(value));
boost::bind(..., boost::cref(value)); // by const ref
}
1 http://www.boost.org/doc/libs/1_46_1/libs/bind/bind.html#Purpose
копия значения i хранится в объекте функции. boost:: ref и boost:: cref можно использовать, чтобы сделать функцию object store ссылкой на объект, а не копией: int i = 5;
bind(f, ref (i), _1);
bind(f, cref (42), _1);