源代码阅读心得——c++基础知识
Stephenxjc_千年一笑
2010年8月6日星期五
对象:C++入门级(初学者)
关键字:头文件包含、类对象实例化、参数传递方式、assert、const
核心内容:c++基础问题的讨论
平台:
思想:之前学过c++,但有点忘了,写出来的代码出了一堆错。通过看别人的源代码,快速回忆基础知识
正文:
1 #ifndef #define #endif
采用#ifndef #define #endif来避免重复包含相同头文件。
2 类对象的实例化
类对象实例化的两种方式:
方式一 |
| 方式二 |
|
|
|
class *a = new a(); |
| class a; |
|
|
|
在堆中存放 |
| 在栈中存放 |
|
|
|
需要通过delete释放内存。在作用域结束前,最好主动调用delete来释放,否则,指针a被销毁,于是,没有指针指向分配到的堆内存,最终导致内存泄露。当然,如果指针a的值已经传到作用域范围外,不属于内存泄露,仍然能够显示调用delete释放内存。 |
| 不需要通过delete释放内存,在作用域结束时,自动调用析构函数,释放内存 |
|
|
|
内存占用比较大的对象,最好利用new方式分配,在不用时,就释放,可以最大化内存的使用 |
| 内存占用比较小的对象,可以采用这种方式,相对比较简单。当然也可以使用方式一,但会比较麻烦 |
|
|
|
在程序结束时,会将分配给程序的所有内存,包括内存泄露,都回收 |
3 传值、传址、传引用
1) 传值方式:采用复制的方式传递函数参数或函数返回值。需要分配参数类型大小的空间。
2) 传址:只需要分配指针所占用的内存空间即可。
3) 传引用:并没有分配内存空间,只是一个别名而已。
4 const
1) 用于修饰对象,保证对象值不被修改。如
const int a=10;表示a为常量变量,值不能被修改。在定义时,必须初始化。
const int a();表示返回的值为常量,不能够被修改。但并不是所必须赋值给常量,如const int b = a();通常使用情况是:const int & a();由于返回了引用,为了防止引用修改函数内部的值,所以强调返回值为常量,不被修改。
2) 用于修饰类成员函数,保证类成员变量的值不被修改。
int a() const;
5 assert
1) 断言,当条件成立时,继续运行。否则,输出出错位置,并终止程序。
2) 断言只是对debug有效,对于release则无效。
3) 作用:可以更好的在debug时发现错误,所以应该尽可能的使用assert,以便在debug中确定出错位置
4) 通常需要断言的情况:
文件打开前,文件打开后都要断言
命令行输入通常需要判断
函数传入的参数,通常需要断言,保证传入的参数符合条件