Efficient C++笔记(一)

第一章 跟踪范例

在运行跟踪范例Trace的过程中,我们需要根据设置的一个是否需要跟踪状态标识,判断是否需要显示跟踪信息。而存储这个跟踪信息的变量,假设是string类型的,那么由于它是一个类类型的,在初始化Trace对象的时候,必须在初始化列表中调用string的构造函数以初始化string对象。然而,如果我们这样做了。当在trace类里,进行输出之前判断跟踪状态标识,状态标识显示并没有需要要输出跟踪信息,因此我们初始化的string对象并没有被用到,故我们之前的string构造函数的调用属于多余的开销,然而如果“我们的类”中包含了类成员,在“我们的类”构造函数调用其“包含的类”的构造函数是在所难免的,也就是无论是否跟踪状态标识显示是否需要输出,都会调用string的构造函数。我们可以采取如下办法解决:

  将string str;改成char*或者string *str;对于后者,在我们的类的构造函数初始化列表中,使用str(0) ——空指针赋值,这个开销是很低的。然后在需要用到string对象输出时(跟踪状态标识显示需要输出时),我们可以再创建一个新对象,然后用str指针指向该对象:

str = new string(name);//name是一个char*类型的字符串,用于初始化这个string对象的。

然后,在我们的Trace类的析构函数中,调用delete str;进行删除指针。

这样的改进可使程序的性能有显著的提升:我们单纯的调用前后两个版本的程序,进行100次,发现性能有显著的区别。前者需要3500ms,后者需要185ms。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值