Копирует ли 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);