博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c/c++:efficient c++,跟踪实例
阅读量:6331 次
发布时间:2019-06-22

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

再看 efficient c++, 写一下笔记。

这是写第一章:跟踪实例。

主要讲一个类,用于跟中,有一个公共变量控制是否需要跟踪,跟踪什么这个看个人要求,通过怎么实现跟踪类能够达到消耗最低。

//初始版本class Trace{public:    Trace(const string &name);    ~Trace();    void debug(const string &msg);    static bool traceIsActive;private:    string theFunctionName;};inlineTrace::Trace(const string &name):theFunctionName(name){    if(traceIsActive)    {        cout<<"Enter function "<
<

 

 初始时类的构造如上。

 调用版本1

//调用版本1int addOne(int x){    string name = "addOne";    Trace t(name);    retur x+1;}

 

 

构造函数的参数类型从 string 变为 char * 。

//构造函数2,调用版本2,int addOne(int x){    char *name ="addOne";    Trace t(name);    return x+1;}inlineTrace::Trace(const char* name):theFunctionName{    if(traceIsActive)    {        cout<<"Enter function "<
<

 

这样在 Trace(name) 时不需要创建一个 name 的字符串。

 

在需要跟踪的时候类才给自身的变量分配空间。

//构造函数3,需要修改class 中theFunctionName 的类型,Trace::Trace(const char* name):theFunctionName(0){    if(traceIsActive)    {        cout<<"Enter function "<
<

 

最后的版本的开销最小,具体数据就看书上的。

要点:

1.对象定义会触发隐形地执行构造函数和析构函数。

2.因为通过引用传递对象还是不能保证良好的性能,所以避免对象的复制的确有利于提高性能。但是如果我们不必一开始就创建和销毁该对象(与temp 相反)的话,这种方式将更有利于性能的提升。

3.不要把精力浪费在计算结果根部不会被使用的地方。(如上面当traceIsActive为FALSE时的第二个版本,该类都会为创建string 空间)

4.在完成同样的简单工作时,(简单工作!)char 指针有时比string 对象更有效率。

5.内联消除了常被使用的小函数调用所产生的函数开销。

转载于:https://www.cnblogs.com/Azhu/archive/2012/07/14/2591455.html

你可能感兴趣的文章
邮件服务器类型的区别
查看>>
hadoop大集群的实施(13)
查看>>
Java获取客户端IP
查看>>
【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验
查看>>
2018阿里云双11拼团大促主会场全攻略
查看>>
阿里云发布迁移解决方案,“迁移上云”这件事有专业的人做
查看>>
在view 5.1中,查看虚拟桌面中的view agent日志
查看>>
玩转大数据系列之一:数据采集与同步
查看>>
Azure PowerShell 1.0.0以上版本在中国Azure使用的注意事项
查看>>
Linux环境下验证码无法获取
查看>>
使用广播实时更新网络状态变化
查看>>
从vfs_read()到ocfs2_file_aio_read()
查看>>
history 命令配置
查看>>
Cell 上的多个按钮点击事件处理
查看>>
【PHP】html嵌套php无法解析问题
查看>>
安全的终止线程:
查看>>
LinuxGrub命令行接口(CentOS6)
查看>>
SELECT查出多行 INTO 单行上会把第一行赋值到单行上
查看>>
microservice-docker- 基本命令
查看>>
php面向对象一
查看>>