1.new和delete基本语法
- 软件开发过程中,需要动态分配和撤销内存空间,例如动态链表中结点的插入与删除。
- C语言中利用库函数:malloc和free函数
- C++中提供了 运算符 : new和delete
- 一般使用格式:
- 用new分配数组空间时不能指定初值。如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。
2. 类对象的动态建立和释放
-
C++中,可以利用new和delete动态建立和撤销对象
- 比如:
box *pt;
//定义一个指向box类对象的指针变量pt pt = new box;
//pt中存放新建对象的起始地址- 执行new时同时初始化:
Box *pt=new Box(12,15,18);
3.编程实践
-
new在堆上分配内存 delete释放
-
分配基础类型、数组类型、变量
分配基础类型
void main01()
{
int *p = (int *)malloc(sizeof(int));
*p = 10;
free(p);
int *p2 = new int;
delete p2;
int *p3 = new int(30);
cout << "*p3 = " << *p3 << endl;
delete p3;
system("pause");
}
分配数组变量
void main02()
{
int *p = (int *)malloc(sizeof(int) * 10);
p[0] = 1;
free(p);
int *pArr = new int[10];
pArr[0] = 1;
cout << "pArr[0] = " << pArr[0] << endl;
delete[] pArr;
system("pause");
}
分配对象
class Test
{
public:
Test(int a)
{
a = _a;
cout << "构造函数" << endl;
}
~Test()
{
cout << "析构函数" << endl;
}
private:
int _a;
};
void main()
{
Test *p = (Test*)malloc(sizeof(Test));
free(p);
Test *p1 = new Test(10);
delete p1;
system("pause");
}