boost::bind的实参传递方式
来源:优易学  2011-11-24 18:38:46   【优易学:中国教育考试门户网】   资料下载   IT书店

  boost::bind在构造函数对象时,实参传递是采用传值方式的,中间会经过若干次的拷贝构造。对于不允许拷贝构造或拷贝构造性能开销较大的情形可以结合boost::ref增加一个wrapper层避免拷贝构造。下面是示例代码:

  #include <iostream>

  #include "boost/bind.hpp"

  #include "boost/ref.hpp"

  struct A

  {

  A(int aValue) : m_value(aValue)

  {

  std::cout << "A()" << std::endl;

  }

  A(const A& a)

  {

  std::cout << "A(const A&)" << std::endl;

  this->m_value = a.m_value;

  }

  int m_value;

  };

  void f(A a)

  {

  std::cout << "f(A)" << std::endl;

  }

  void g(A& a)

  {

  std::cout << "g(A&)" << std::endl;

  }

  int main()

  {

  A a(10);

  std::cout << "...f1..." << std::endl;

  boost::bind(&f, a)();

  std::cout << "...f2..." << std::endl;

  boost::bind(&f, boost::ref(a))();

  std::cout << "...g1..." << std::endl;

  boost::bind(&g, a)();

  std::cout << "...g2..." << std::endl;

  boost::bind(&g, boost::ref(a))();

  return 0;

  }

  输出:

  A()

  ...f1...

  A(const A&)

  A(const A&)

  A(const A&)

  A(const A&)

  A(const A&)

  A(const A&)

  f(A)

  ...f2...

  A(const A&)

  f(A)

  ...g1...

  A(const A&)

  A(const A&)

  A(const A&)

  A(const A&)

  A(const A&)

  g(A&)

  ...g2...

  g(A&)

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训