Boost :: bind () копирует параметры по ссылке или по значению? - PullRequest
6 голосов
/ 18 июня 2011

Почему инструмент DRD от Valgrind жалуется на «Конфликт нагрузки по нитям ... в размере 4»: примерно такой код:

void SomeFunction(const int& value)
{
    boost::bind(..., value); /* <-- complaines on this line
                                with last backtrace function "new(int)" */
}

Сохраняет ли boost :: bind () значения по ссылке или по значению?

1 Ответ

14 голосов
/ 18 июня 2011

По значению. 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 могут использоваться, чтобы заставить объект функции хранить ссылку на объект, а не на копию: int i = 5;

bind (f, ref (i), _1);

bind (f, cref (42), _1);

...