1 malloc/free和mew/delete
属性:
- new、delete是运算符;malloc和free是c++/c的标准库函数,通常对象在创建的时候需要自动执行构造函数,对象在消亡之前要自动执行析构函数,但malloc和free是库函数不是运算符,编译器不能把执行构造函数和析构函数的任务强加给malloc/free
申请情况:
- malloc在使用时需要显式的指出所需内存的大小
- new申请分配内存时无需指定内存的大小,编译器会自行计算new可以被重载,malloc不能。
返回值:
- malloc分配内存失败时返回NULL
- new内存分配失败时,会调用bac_alloc异常
- malloc返回的时void *类型指针(必须进行类型转换)
- new返回的是具体的对象类型指
2 c++宏定义和typedef
- 1 宏定义主要用于书写复杂的内容;typedef主要用于定义类型别名
- 2 宏替换发生在编译阶段之前(预处理),属于文件插入替换;typedef是编译的一部分
- 3 宏不检查数据类型,没有使用作用域,只要是前面定义过,后面就能用;Typedef会检查数据类型,这个有自己的作用域
- 4 宏定义不是函数语句,不用在后面加分号;typedef是语句,需要加分号 标识结束
- 5 对指针的操作,有很大区别;二者修饰指针类型时,作用不同。(当const和typedef一起出现时,typedef不会是简单的字符串替换)
Typedef int * pint;
#define PINT int *
Const pint p;//p是指针常量,相当于 int * const p,不可更改,p指向的内容可以更改,;
Const PINT p;//p是常量指针,相当于 const int *p;或 int const *p,可以更改,p指向的内容不能更改,;
pint s1, s2; //s1和s2都是int型指针
PINT s3, s4; //相当于int * s3,s4;只有一个是指针。