1.new和delete是运算符,不是函数,所以执行效率比malloc()和free()高
2.new开辟出的空间返回的都是首地址,所以必须用指针接收
? ? ? ? ? ?指针变量 = new 类型(常量);->可以不初始化常量,写做:指针变量 = new 类型;
? ? ? ? ? ?指针变量 = new 类型[表达式];? ? ? ? ? ? ? ? ?//数组
? ? ? ? ? ?指针变量 = new 类型[表达式][表达式];? ? //二维数组
3.delete 删除new出来的指针
? ? ? ? ? ? delete 指针变量;
? ? ? ? ? ?delete[] 指针变量;? ? //删除指向数组的指针
4.内存泄漏:程序中已经动态分配的堆内存未释放或无法释放,造成系统内存浪费,程序速度减慢甚至系统崩溃等后果
? 申请的内存要及时释放
(1)auto(自动变量):函数中所有非静态局部变量(c语言中)
? ? ? ? ?[c++中的auto是自动推断类型]
(2)register(寄存器变量)
? ?不属于内存,使用频率高的变量可以设置成寄存器变量
? ?寄存器变量不能定义为全局变量
(3)static(静态变量):全局存在,但是只能在定义其的函数中访问到(作用域范围是从它定义开始往下,上面用不了)
? ?static变量分为(1)全局static变量(2)局部static变量
? ?static变量只能定义一次,不会每次定义都赋初值
(4)extern(外部变量)
? 把全局变量在其他源文件中声明为extern变量,可以将全局变量的作用域扩展到声明的那个文件(对全局变量作用域的扩展)
例:extern int?a;//a是其他源文件的全局变量,在当前这个文件中使用时要加上extern
6.总结
存储类别 | 存储期 | 作用域 | 声明方式 |
---|---|---|---|
局部static | 静态 | 块 | 块内,使用关键字static |
全局static | 静态 | 文件内部,定义地方下面 | 所有函数外,使用关键字static, |
extern | 静态 | 文件外部 | 所有函数外,引用其他源文件的全局变量时加上关键字extern |
??