【问题标题】:Does boost::bind() copy parameters by reference or by value?boost::bind() 是按引用还是按值复制参数?
【发布时间】:2011-06-18 15:42:33
【问题描述】:

为什么 valgrind 的 DRD 工具会抱怨“线程负载冲突...大小为 4”:关于此类代码:

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

boost::bind() 是按引用还是按值存储值?

【问题讨论】:

  • 如果失败在绑定的行显然是绑定时的问题,所以绑定是复制还是引用无关紧要

标签: c++ valgrind boost-bind


【解决方案1】:

按价值。 1

但你可以改为copy by ref

void SomeFunction(const int& value)
{
    boost::bind(..., boost::ref(value)); 
    boost::bind(..., boost::cref(value)); // by const ref
}

1http://www.boost.org/doc/libs/1_46_1/libs/bind/bind.html#Purpose

i 的值的副本存储到函数对象中。 boost::ref 和 boost::cref 可用于使函数对象存储对对象的引用,而不是副本: int i = 5;

绑定(f, ref(i), _1);

绑定(f, cref(42), _1);

【讨论】:

  • 那么为什么 DRD 会抱怨“new(int)”呢?
  • @Slav:我怎么知道?发布更多代码,以便我可以运行它并亲自查看:) 我很乐意提供帮助,但代码还不够。不到一英里
猜你喜欢
  • 2018-09-24
  • 2013-02-09
  • 2013-05-03
  • 2013-01-21
  • 2016-03-10
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
相关资源
最近更新 更多