C++ New和Delete

 

目录

前言

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;
}

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值