如有错误,欢迎不吝指正
1. 三大函数
Big Three:类的三大特殊函数——拷贝构造、拷贝赋值、析构函数。有指针的类必须要有Big Three。
当构造类时,若没有构建拷贝构造函数和拷贝赋值函数,系统会自动构建,使用字节到字节的拷贝。这适用于没有指针的类,但不适用于有指针的类。因为有指针的类使用系统默认的函数时,只是简单的对指针本身的值进行拷贝,而实际上所需要的拷贝是将指针所指向的内存进行拷贝。
拷贝赋值的过程:清空左值(delete),赋予足够大的空间(new),拷贝(strcpy)
一定要在operator=中考虑到自我赋值的情况,不然自我赋值时程序会错误,导致所指内容被删除
2. 堆(heap),栈(stack)与内存管理
栈:存在于作用域内的一块内存空间,存储函数参数、局部对象等。stack object的生命在作用域结束之际结束,会被自动清理。
static object的生命在作用于结束后仍然存在,直到整个程序结束。
堆:由操作系统提供的一块global内存空间,可动态分配获得,其生命在被delete之际结束,所以new出来东西一定要记得delete。
3. 进一步补充
static
声明与定义
定义:造成变量获得内存,即为定义
静态的数据要在类声明的外面写定义语句。
静态函数只能处理静态数据。
4. 其它的体会
内存泄漏:动态分配的堆内存没有被回收,即new出来的东西没有被delete。
内存溢出:动态分配堆内存时内存不够无法分配,一般由内存泄漏导致。
引用符&:对对象的引用。
取地址符&:取得对象的地址。
const int *p:底层const,指向const int的指针,指针本身不是const。
int const *p:与const int *p一样。
int * const p:顶层const,指向int的const指针,在声明时需要初始化,之后不能改变。但其指向的int的值可以被改变。
const int * const p:指向const int的const指针。