一、new和delete操作符
1、malloc free是函数,标准库,需要stdlib.h,new和delete是C++语言的操作符,因此执行效率高。
2、new 运算符动态分配堆内存
使用方式:
指针变量 = new 类型(常量);
指针变量 = new 类型[表达式];
作用:从堆分配一块“类型”大小的存储空间,返回首地址
其中:“常量”是初始值,可以缺省,创建数组对象时,不能为对象指定初始值
3、delete运算符释放已分配的内存空间
使用形式:
delete 指针变量;
delete [] 指针变量;
其中:“指针变量”必须是一个new返回的指针
4、malloc不会调用类的构造函数,而new会调用类的构造函数,free不会调用类的析构函数,而delete会调用类的析构函数
二、静态成员变量和成员函数
1、在C++中,静态成员是属于整个类。而非某个对象,静态成员变量只存储一份供所有对象共用。使用静态成员变量实现多个对象之间的数据共享而不破坏隐藏的原则,保证了安全性还可以节省内存。
2、静态成员变量在类内声明,类外初始化,如下:
//声明
static 数据类型 成员变量; //在类的内部
//初始化
数据类型 类名::静态数据成员 = 初值; //在类的外部
//调用
类名::静态数据成员
类对象.静态数据成员
注意:
(1)static成员变量实现了同类对象间信息共享
(2)static成员类外存储,求类大小,并不包含在内,static成员是命名空间属于类的全局变量,存储在data区
(3)static成员只能类外初始化
(4)可以通过类名访问,也可以通过对象访问
3、静态成员函数
类内函数声明,类外函数定义,如下所示:
//声明
static 函数声明
//调⽤
类名::函数调⽤
类对象.函数调⽤
注意:
静态成员函数只能访问类内的静态数据成员。原因:非静态成员函数,在调用时this指针被当作参数传进,而静态成员函数属于类,而不属于对象,没有this指针。