boost::bind不同参数形式性能分析

2014年4月16日 由 Creater 留言 »

boost::bind针对于值,引用,指针提供了统一的语法使用,可以利用这一特点,简化编码,来看下面的代码:

#include <boost/shared_ptr.hpp>
#include <boost/bind.hpp>
#include <iostream>

class A
{
public:
	A(){std::cout<<"A构造函数"<<std::endl;}
	A(const A& a) {std::cout<<"A拷贝构造函数"<<std::endl;}
	A& operator=(const A& a){std::cout<<"A赋值函数"<<std::endl;}
	~A(){std::cout<<"A析构函数"<<std::endl;}
	void printA(){}
};

int _tmain(int argc, _TCHAR* argv[])
{
	{
		A a;
		boost::bind(&A::printA, a)(); //1
		boost::bind(&A::printA, boost::ref(a))();//2
		boost::bind(&A::printA, &a)();//3
	}
	system("pause");;
	return 0;
}

使用1的时候,有多次的拷贝构造函数调用,因为bind是值语义的。

使用2,3的时候,则对A的对象只有一次构造和一次析构。

大约可以得出:在类A拷贝比较复杂或者耗时的情况下,最好还是使用引用或者指针方式传递。否则还是以值语义来传递。

广告位

评论已关闭.