C 风格与技巧说明介绍
创始人
2024-06-22 06:01:16
0

C++作为一种编程语言,仅仅是它的语法、特性、标准类库就已经是一项非常难理解的东西了,所以在开始接触时,一定要打下良好的代码,这样才会给今后的学习带来便捷的道路。下面说一下C++风格与技巧问题。

早在1981年,我就指出,通过将我必须显式地跟踪的对象的数量从几万个减少到几打,为了使程序正确运行而付出的努力从可怕的苦工,变成了应付一些可管理的对象,甚至更加简单了。如果你的程序还没有包含将显式内存管理减少到最小限度的库,那么要让你程序完成和正确运行的话,最快的途径也许就是先建立一个这样的库。

  1. #include 
  2.  
  3. #include 
  4.  
  5. using namespace std;  
  6.  
  7.  
  8. struct S {  
  9.  
  10. S() { cout << "make an S\n"; }  
  11.  
  12. ~S() { cout << "destroy an S\n"; }  
  13.  
  14. S(const S&) { cout << "copy initialize an S\n"; }  
  15.  
  16. S& operator=(const S&) { cout << "copy assign an S\n"; }  
  17.  
  18. }; 

模板和标准库实现了容器、资源句柄以及诸如此类的东西,更早的使用甚至在多年以前。异常的使用使之更加完善。如果你实在不能将内存分配/重新分配的操作隐藏到你需要的对象中时,你可以使用资源句柄(resource handle),以将内存泄漏的可能性降至最低。

这里有个例子:我需要通过一个函数,C++风格与技巧在空闲内存中建立一个对象并返回它。这时候可能忘记释放这个对象。毕竟,我们不能说,仅仅关注当这个指针要被释放的时候,谁将负责去做。

使用资源句柄,这里用了标准库中的auto_ptr,使需要为之负责的地方变得明确了。在更一般的意义上考虑资源,而不仅仅是内存。如果在你的环境中不能系统地应用这些技巧(例如,你必须使用别的地方的代码。

或者你的程序的另一部分简直是原始人类(译注:原文是Neanderthals,尼安德特人,旧石器时代广泛分布在欧洲的猿人)写的,如此等等),那么注意使用一个内存泄漏检测器作为开发过程的一部分,或者插入一个垃圾收集器(garbage collector)。

我为什么在捕获一个异常之后就不能继续?换句话说,C++为什么不提供一种简单的方式,让程序能够回到异常抛出点之后,并继续执行?主要的原因是,如果从异常处理之后继续,那么无法预知掷出点之后的代码如何对待异常处理,是否仅仅继续执行,就象什么也没有发生一样。

异常处理者无法知道,在继续之前,有关的上下文环境(context)是否是“正确”的。要让这样的代码正确执行,抛出异常的编写者与捕获异常的编写者必须对彼此的代码与上下文环境都非常熟悉才行。这样会产生非常复杂的依赖性,因此无论在什么情况下,都会导致一系列严重的维护问题。

当我设计C++的异常处理机制时,我曾经认真地考虑过C++风格与技巧允许这种继续的可能性,而且在标准化的过程中,这个问题被非常详细地讨论过。请参见《C++语言的设计和演变》中的异常处理章节。

【编辑推荐】

  1. C与C++中标准输入实现方式上的一点区别
  2. C++编译器如何对Const常量进行分配存储空间
  3. C++类库设计的基本构思与方法
  4. 玩转C++语言的几种方法
  5. 如何更好的进行C++代码编制

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...