|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 moc 于 2018-9-1 16:57 编辑
1、基础
new:动态分配堆内存
使用形式: 指针变量 = new 类型(常量)
指针变量 = new 类型[表达式]
其中:"常量"为初始化值,可缺省,在创建申请数组时,不能为其指定初始化值。
delete:释放已分配的内存空间
使用形式: delete 指针变量;
delete [] 指针变量;
其中指针变量必须是new返回的一个指针变量。
- // 申请和释放单个变量空间
- int *p2 = new int(10); // 和 int *p = (int *)malloc(sizeof(int))类似
- printf("%d\n", *p2);
- delete p2;
- // 申请和释放变量数组空间
- int *p1 = new int[10]; //和 int *p = (int *)malloc(10*sizeof(int))类似
- for (int i=0; i<10; i++)
- {
- p1[i] = i+1;
- printf("%d\n", p1[i]);
- }
- delete[] p1; // 释放申请的内存
复制代码
2、new/delete 与 malloc/free
在C++中,上面的混合使用,程序并不会报错(VS2015下),但不建议这么做。
c++中的new能自动的调用类的构造函数,delete能调用类的析构函数
malloc不会调用类的构造函数 free也不会调用类的析构函数
delete 默认的析构是浅析构,并不会释放成员中变量申请的内存空间,需要重写析构函数。
3、static关键字
static 关键字 表明变量是一个状态变量,该变量存储于全局区。
C++类中的static成员
C语言中:static修饰的全局函数,只能用于该.c文件。
类中用static修饰的成员,是类的静态成员,C++为静态成员提供了同类对象的共享机制,即类的所有成员共享这个static成员,静态成员属于类,不属于对象成员。
静态成员定义:
在类外: 类型 类名::变量名 = 值;
- class counter
- {
- static int num; // 类里声明静态成员
- public:
- void setnum(int i) {num = i;}
- }
- int counter::num = 0; //类外赋值
- void main()
- {
- ....
- }
复制代码
注意:在类中用static修饰的函数,是类的静态成员函数,类的静态成员函数也属于整个类的,不属于类的成员,因此不能再类的成员函数中,使用普通类的成员变量。
在类外调用类的静态成员函数时,既可以用“类名::”做限定,也可以通过对象来调用。
|
|