• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    4年前 (2014-04-16)  boost.bind 评论关闭  18 
    文章评分 0 次,平均分 0.0

    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拷贝比较复杂或者耗时的情况下,最好还是使用引用或者指针方式传递。否则还是以值语义来传递。

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/3304.html

    关于
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享