moc 发表于 2018-9-1 16:55:01

029-C++之new与delete、 static关键字

本帖最后由 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;        //和 int *p = (int *)malloc(10*sizeof(int))类似
for (int i=0; i<10; i++)
{
        p1 = i+1;
        printf("%d\n", p1);
}
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修饰的函数,是类的静态成员函数,类的静态成员函数也属于整个类的,不属于类的成员,因此不能再类的成员函数中,使用普通类的成员变量。
在类外调用类的静态成员函数时,既可以用“类名::”做限定,也可以通过对象来调用。

ZCJ7777 发表于 2018-11-23 18:23:23

睿智!!!!
页: [1]
查看完整版本: 029-C++之new与delete、 static关键字