博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解boost::bind的实参传递方式
阅读量:6343 次
发布时间:2019-06-22

本文共 974 字,大约阅读时间需要 3 分钟。

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&)

转载地址:http://rlkla.baihongyu.com/

你可能感兴趣的文章
HoloLens开发手记 - Vuforia开发概述 Vuforia development overview
查看>>
Android支付之支付宝封装类
查看>>
<亲测>CentOS中yum安装ffmpeg
查看>>
【分享】马化腾:产品设计与用户体验
查看>>
【机器学习PAI实践十】深度学习Caffe框架实现图像分类的模型训练
查看>>
全智慧的网络:思科十年来最具颠覆性的创新
查看>>
怎样将现有应用迁移到 VMware NSX
查看>>
赛门铁克收购以色列移动安全初创公司Skycure 旨在构建网络安全防御平台
查看>>
《Photoshop蒙版与合成(第2版)》目录—导读
查看>>
“最佳人气奖”出炉!4月27号,谁能拿到阿里聚安全算法挑战赛的桂冠?
查看>>
《网页美工设计Photoshop+Flash+Dreamweaver从入门到精通》——2.6 图层与图层样式...
查看>>
今天的学习
查看>>
面试必问之JVM原理
查看>>
mysql主主同步+Keepalived
查看>>
研究音频编解码要看什么书
查看>>
tomcat远程调试配置
查看>>
QuartZ Cron表达式
查看>>
性能测试工具VTune的功能和用法介绍
查看>>
音频视频组件Audio DJ Studio for .NET更新至v10.0.0.0丨附下载
查看>>
RMAN Complete Recovery
查看>>