C++本不是门易学的语言,入门如此,进阶更甚,而当我从一个写C++程序之人,转变成调试大型C++工程之人的时候,我深切的感受到了C++的晦涩难懂。
当我面对一个个bug的时候,我是那么迷茫:
明明已经是个空指针了,为何程序会崩溃在指针指向的函数之中,而不是调用之时?
明明是已经被删除的指针,怎么还能对内存访问得那样自如?
明明也是个空指针,但这次为何在函数调用之时就崩溃了?
再加上找不到原因的野指针、多线程引起的访问冲突、无缘无故的内存异常。
C++像一匹脱缰的野马,四处乱窜,而我却完成不能驾驭。
我不得不发出一声叹息:“DT的C++啊~~!”
幸好,得到前辈的指点,告诉我调试C++的一个简单的方法:“看汇编吧”。。
是啊,函数那么长,变量那么多,还有编译器的优化和inline函数的干扰,想从函数调用栈这个单薄的信息找到程序崩溃的关键原因,谈何容易。
只有汇编了。
通过汇编,我终于看到了真实的C++,那个隐藏在表达式、变量、函数、类和模板背后的C++。
也通过这些调试的经历,认识到了作为一个C++的程序员,具有底层实现知识的素质是多么重要。
只有了解了C++实现的基本方法和模型,才能更好的驾驭这匹骏马。
于是就在上个星期,我买下了Stanley B.Lippman著,侯捷译的《深度探索C++对象模型》(英文原名:"Inside The C++ Object Model")。
开始了解那些C++代码背后的世界。
这本书有7章,从C++对象的整体、构造函数等到异常处理、模板。介绍了C++对象背后,编译器层面所作的工作。
- 第1章,关于对象。是从整个对象的全局观来审视C++,并对比C++和C,讨论出一个较为高效和简明的C++对象模型。
- 第2章,构造函数语意学。这一章将C++隐藏在背后的构造函数搬到台前,告诉我们它是如何实现,并高效工作的。
- 第3章,Data语意学。讨论了成员变量是如何处理的。
- 第4章,Function语意学。除讨论了一般的成员函数外,还重点介绍了如何支持虚函数。
- 第5章,构造、析构(原文用解构,可能是台湾的用法吧。。)、拷贝语意学。讨论了这些特殊函数是如何影响C++类的。
- 第6章,执行期语意学。将执行期的某些对象行为展现出来,包括临时对象的创建、销毁,以及new、delete的支持。
- 第7章,在对象模型的尖端。讲述了对一些C++高级语法的支持,包括异常处理、模板、动态类型检测。