new 数组_C++中new和delete的作用

知识点1【new delete】

知识点1【new delete】1、new 给基本类型申请空间
void test01()
{
//基本类型
int *p = NULL;
//p = (int *)calloc(1,sizeof(int));
//p = new int(100);// *p = 100
p = new int;
*p = 100;
cout<<"*p = "<<*p<<endl;//100
//释放 free(p)
delete p;
}2、new 申请 基本类型数组空间

72736fe2322bdd29a69bf6e73e760bdb.png

595de987d0b7dc5ffbe60d9de56c257c.png

9fb200477480e4208798efddbbc5a706.png


注意:
new 没有加[] delete释放的时候 就不加[]
new 加[] delete释放的时候 就加[]3、new delete 给类对象申请空间

3da670c0177f64b1e83ec4d245eb9c7b.png

ee9a6c9b5a9d85bde6aa81bd3a9d96f9.png

知识点2【对象数组】本质是数组 只是数组的每个元素是类的对象

7fc5c18769565ad2cef15c3f50b9b6f2.png


运行结果;

548747fe18d35a87ddcc3d78895ea89a.png

2、如果想让对象数组中的元素调用有参构造 必须人为使用 有参构造初始化。
void test07()
{
//对象数组 arr1是数组 每个元素是Person类型的对象
//定义对象数组的时候 系统会自动给 数组中的每个元素 调用构造函数
//人为 为元素 调用有参构造
//初始化部分 调用有参构造 为初始化部分自动调用默认构造(无参构造)
Person arr1[5]={ Person("lucy",18), Person("bob",20)};
//arr1[0] 第0个元素 就是Person的对象
arr1[0].showPerson();
arr1[1].showPerson();
}
运行结果:

a445a2e517532fd37b1a39e4921c9d60.png

3、用new delete申请 对象数组
void test08()
{
//第一种方式
Person *arr = NULL;
arr = new Person[5];//调用无参构造
delete [] arr;
//第二种方式:
//初始化的元素 调用有参构造 没有初始化 的调用无参构造
Person *arr2 = new Person[5]{Person("lucy",18), Person("bob",20)};
(*(arr2+0)).showPerson();
arr2[0].showPerson();
(arr2+1)->showPerson();
delete [] arr2;
}4、尽量不要用delete释放void *

d63c07af4ddb5dfec3d9623ff026c8bd.png

注意:没有析构?为哈?
delete发现p1指向的类型 为void 无法从void中寻找响应析构函数

99e8d6bf89a9b874a955868ee6981908.png

5、malloc、free和new、delete 不可以混搭使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值