设为首页 加入收藏

TOP

4.5.3 静态对象
2013-10-07 15:04:03 来源: 作者: 【 】 浏览:62
Tags:4.5.3 静态 对象

4.5.3  静态对象

如果在程序库的实现中定义了任何静态对象,那么实现者就需要小心处理这些对象所使用的空闲存储空间。考虑4.5.1小节讨论的preprocess函数,假设由于某种原因;preprocess函数使用了一个静态变量,用来保存输入文本的当前行:

  1. bool preprocess(istream& i, const List<string>& incldirs,  
  2.              ostream& o) {  
  3.         static String curline;  
  4.         while(more text in i) {  
  5.              curline = nex line of text in i;  
  6.              //...  
  7.        }  
  8.        //...  
  9.        return true;  
  10.    }  

如上面的伪代码所示,preprocess每次都读取一行文本,并把它赋给curline变量。而且,由于String类的实现,这行文本会被储存在空闲存储空间里面。于是,当preprocess函数返回的时候,问题就出现了;curline这时还存储着文本的最后一行;也就是说,用于存储curline的空闲存储空间将会被白白浪费,直到下次调用preprocess函数或者这个程序执行结束。另外,对于输入行的长度并没有给予一定的限制,从而对preprocess函数浪费的空闲存储空间的大小也就没有限制了。

为了解决这个问题,可以在从程序库函数返回之前,释放静态对象使用的空闲存储空间;

  1. bool preprocess(istream& i, const List<String>& incldirs,  
  2.           ostream& o) {  
  3.     //...  
  4.     curline = ""           //释放curline使用的空间。  
  5.     return true;  
  6. }  

把空字符串赋值给curline变量几乎释放了curline使用的所有空闲存储空间,只有遗留微不足道的存储空间没有释放。很自然地,通过上面这种方法,对象所使用空间的释放方式取决于对象的类型。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.4.1 内联(inlning) 下一篇4.4.3 返回引用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: