Boolan-C++开发工程师-C++面对对象高级编程(上)- 第二周笔记

来源:互联网 发布:js 按键 编辑:程序博客网 时间:2024/05/19 22:57

如有错误,欢迎不吝指正


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指针。


阅读全文
0 0
原创粉丝点击