• 软件测试技术
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘

字号: | 推荐给好友 上一篇 | 下一篇

临时对象

发布: 2008-4-24 10:34 | 作者: 不详 | 来源: rdxx | 查看: 18次 | 进入软件测试论坛讨论

领测软件测试网 软件测试技术门户dk/J9?U(J9f2H+t Vr&v

软件测试技术门户Y0{t9A ztUS8b%u

  *.此处是一个题外话,但很值得注意。看起来好像简单地将函数返回值类型从string类型改为引用类型sting&就又可以避免产生一个临时对象,但这是错误的!如果你幸运的话,你的程序会在函数调用者使用返回的引用时就马上崩溃,因为引用所指的局部对象已经不存在了。如果你不够幸运的话,你的程序看起来好像可以工作,但却不定期的崩溃,那将可能让你熬好几个晚上的长夜来调试找错。软件测试技术门户;G}Zy2yF!|V
           [准则]千万千万不要将一个局部对象的引用作为返回值。软件测试技术门户K?LQ6G(y)},W
         (注意:新闻组上有些人贴文正确的指出:可以通过声明一个静态对象,并在  没有查到对应雇员的地址时返回这个静态对象的引用,这样就可以把函数返回值改为引用类型而并不改变函数的语义。这同样也说明你在返回引用时必须了解所引用对象的生命周期以保证返回的引用有效。)软件测试技术门户1m;|qrr1DSm
    
)h J3eQ3KsMG'^Z    上述代码中还有一些可以优化的地方,比如可以避免调用end(),可以(或者说应该)使用一个const_iterator类型的迭代器。暂时不考虑这些,我们可以写出如下的较好的函数定义:软件测试技术门户s;t8l4G/r3~4\
   string FindAddr( const list<Employee>& l, const string& name )软件测试技术门户:C B"DR8j K8e
  {