目录
前言
New
Delete
前言
new是c++中用于动态申请空间的运算符,malloc也是用于动态申请空间的,但malloc是函数。
New
new是用来开辟一段新空间的,和一般申明不同的是,new开辟的新空间是在堆上,而申明的变量是在栈上。也就是说,当在局部函数中new出一段新的空间,该段空间在局部函数调用结束后仍然能够使用,可以用来向主函数传递参数。
new会返回一段空间的首地址,需要用指针来接收。
注意new的叫法:new操作符是关键字,不用加头文件,可重载。
操作符new则是一个函数。
new的使用:
new是运算符,不需要加头文件直接使用。
int fun1(){
int *p = new int(3);
}
也可以不用初始化,然后后面再赋值。
int fun2(){
int *p = new int;
*p = 3;
}
还可以不用指针来接收,而是用一个变量,但需要在new前加上*。
int fun3(){
int q = *new int;
q = 3;
cout << q << endl;
}
new一个数组时,也需要一个指针来接收首地址。
int* fun4(){
int *q = new int[3];
for (int i = 0; i < 3;++i){
q[i] = i; //赋值
}
return q;
}
new一个结构体数组也是如此,需要一个结构体指针来接收:
struct student{
string name;
int age;
};
student* fun5(){
student *stu = new student[3]{{ "张三", 20 }, { "李四", 20 }, { "王五", 20 }};
return stu;
}
Delete
delete也是个运算符,不需要加头文件,delete用于释放内存。
new和delete一定要配合使用,如果new了一个新空间后不delete,那么就会造成内存泄漏甚至是程序崩溃。
而且new和delete也需要匹配使用:
不匹配使用的话也可能会导致内存泄漏和程序崩溃。
void fun1(){
int *p = new int(3);
delete p; //
}
void fun4(){
int *q = new int[3];
for (int i = 0; i < 3;++i){
q[i] = i; //赋值
}
delete[] q;
}