摘要: extern是一个关键字,它告诉编译器存在着一个变量或者一个函数,如果在当前编译语句的前面中没有找到相应的变量或者函数,也会在当前文件的后面或者其它文件中定义,来看下面的例子:上面代码中变量i和函数func在文件末尾定义,所以变量需要使用extern关键字告诉编译器,变量在别的地方定义。extern int i我原来以为extern i就可以,结果编译器报错,仔细想下确实应该,否则编译器不知道i是什么类型的数据,又怎么能判断i = 0是否是一个正确的赋值语句呢?那么定义在其他文件中的函数和变量,如何通过extern关键字调用呢?首先,定义在其它文件中的函数和变量,可以使用两种方法调用:一、使用 阅读全文
posted @ 2014-03-17 16:52 大卫酱_David 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 析构函数的工作方式是:最底层的派生类(most derived class)的析构函数最先被调用,然后调用每一个基类的析构函数。--从高到低依次析构…因为在C++中,当一个派生类对象通过使用一个基类指针进行删除(B::A; A *a = new B(); delete a),而这个基类有一个非虚的析构函数,则结果是未定义的。运行时比较有代表性的后果是对象的派生部分不会被销毁。然而,基类部分很可能已被销毁,这就导致了一个古怪的“部分析构”对象,这是一个泄漏资源。排除这个问题非常简单:给基类一个虚析构函数。于是,删除一个派生类对象的时候就有了你所期望的正确行为。将销毁整个对象,包括全部的派生类部分 阅读全文
posted @ 2014-03-17 11:11 大卫酱_David 阅读(185) 评论(0) 推荐(0) 编辑