C++_基础复习_01知识点总结
new和malloc(动态内存分配。)的区别
malloc:
原型:extern void *malloc(unsigned int num_bytes);
说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。
- new 是运算符,malloc是库函数
- malloc只能开辟内存无法初始化,new即可以开辟内存又可以初始化。
- malloc申请失败会返回空指针,new申请失败会抛出异常。( new抛出std::bad_alloc异常。)
- malloc申请以字节为单位的内存空间,
引用和指针:
- 定义一个引用和指针 在底层汇编指令上一样。
指针和引用有什么区别?
eax ,[a];//eax 通用地址寄存器
dword ptr [p],eax;
在汇编代码没区别 - 俩种方法,改变内存的方式时是一样的。
- 引用必须初始化,指针可能存在(空指针,野指针),不存在空引用
- 没有多级引用。无法访问引用本身的地址,给引用取地址,相当于取它引用的内存地址。
- 引用相当于给变量取别名。
类
全局变量在.data数据段,共享成员方法在.text段。
struct 和 class 区别默认访问限定符的区别:
struct默认是public:
class默认是private:
在linux中 空结构体sizeof(struct)上是零。
在VS中不允许定义空结构体。
空类的sizeof(class)是1.
函数重载
- 函数名相同,参数不同
- 不能根据返回值判断。
- 在一个作用域中实现函数的重载。
析构函数和构造函数:
- 函数名字和类名相同
- 函数没有返回值
- 析构函数不能由参数,不能被重载,只能有一个析构函数。
- 默认定义一个类必须实现 a,默认构造函数 b,拷贝构造函数 c,赋值运算符重载函数。
浅拷贝和深拷贝
对象浅拷贝容易造成堆资源释放会出现问题。
内存泄漏定义:
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。