鱼C论坛

 找回密码
 立即注册
查看: 2616|回复: 1

[学习笔记] 029-C++之new与delete、 static关键字

[复制链接]
发表于 2018-9-1 16:55:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 moc 于 2018-9-1 16:57 编辑

1、基础
new:动态分配堆内存
使用形式:   指针变量 = new 类型(常量)      
                   指针变量 = new 类型[表达式]
其中:"常量"为初始化值,可缺省,在创建申请数组时,不能为其指定初始化值。

delete:释放已分配的内存空间
使用形式:   delete 指针变量;
                   delete [] 指针变量;
  其中指针变量必须是new返回的一个指针变量。

  1. // 申请和释放单个变量空间
  2. int *p2 = new int(10);       // 和 int *p = (int *)malloc(sizeof(int))类似
  3. printf("%d\n", *p2);
  4. delete p2;
  5. // 申请和释放变量数组空间
  6. int *p1 = new int[10];        //和 int *p = (int *)malloc(10*sizeof(int))类似
  7. for (int i=0; i<10; i++)
  8. {
  9.         p1[i] = i+1;
  10.         printf("%d\n", p1[i]);
  11. }
  12. 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成员,静态成员属于类,不属于对象成员。
静态成员定义:
在类外: 类型 类名::变量名 = 值;
  1. class counter
  2. {
  3.         static int num;   // 类里声明静态成员
  4.         public:
  5.         void setnum(int i)  {num = i;}
  6. }
  7. int counter::num = 0;    //类外赋值
  8. void main()
  9. {
  10. ....
  11. }
复制代码

注意:在类中用static修饰的函数,是类的静态成员函数,类的静态成员函数也属于整个类的,不属于类的成员,因此不能再类的成员函数中,使用普通类的成员变量。
在类外调用类的静态成员函数时,既可以用“类名::”做限定,也可以通过对象来调用。

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-11-23 18:23:23 | 显示全部楼层
睿智!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 02:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表