C++之new的详解

目录

定义

输出结果

new使用方法

new创建对象

代码样例

输出结果

new()的意义

代码样例

输出结果

new开辟一维数组空间

代码样例

输出样例

new开辟二维数组空间

总结


定义

new其实就是计算机开辟一段新的空间,但是和一般的声明不同的是,new开辟的空间在堆上,而一般声明的变量存放在栈上。通常来说,当在局部函数中new出一段新的空间,该段空间在局部函数调用结束后仍然能够使用,可以用来向主函数传递参数。另外需要注意的是,new的使用格式,new出来的是一段空间的首地址。所以一般需要用指针来存放这段地址。

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
    int *p=new int;
    *p=5;
    cout<<*p;
    return 0;
} 

输出结果

5

new使用方法

new创建对象

当只使用new时,new分配这种类型的一个大小的内存空间,需要没有初始化,需要手动初始化。

代码样例

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
    int *str=new int;
    *str=10;
    cout<<*str;
    return 0;
} 

输出结果

10

new()的意义

new( ) 分配这种类型的一个大小的内存空间,并以括号中的值来初始化这个变量;

代码样例

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
    int *str=new int(3);//将一个int类型的地址赋值给指针 
    cout<<*str;
    return 0;
} 

输出结果

3

new开辟一维数组空间

new[ ] 分配这种类型的n个大小的内存空间,并用默认构造函数来初始化这些变量;

代码样例

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
    int *str=new int[10];//将一个含有10个整数的地址赋值给str 
    for(int i=0;i<10;i++){
        cin>>str[i];
        cout<<str[i]<<" "; 
    } 
    return 0;
} 

输出样例

1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

new开辟二维数组空间

当使用new运算符定义一个多维数组变量或数组对象时,它产生一个指向数组第一个元素的指针,

返回的类型保持了除最左边维数外的所有维数。例如:

int *p1 = new int[10];

返回的是一个指向int的指针int*

int (*p2)[10] = new int[2][10];

new了一个二维数组, 去掉最左边那一维[2], 剩下int[10], 所以返回的是一个指向int[10]这种一维数组的指针int (*)[10].

int (*p3)[2][10] = new int[5][2][10]; new了一个三维数组, 去掉最左边那一维[5], 还有int[2][10], 所以返回的是一个指向二维数组int[2][10]这种类型的指针int (*)[2][10].

总结

new创建对象需要指针接收,一处初始化,多处使用

new创建对象使用完需delete销毁

new创建对象直接使用堆空间,而局部不用new定义对象则使用栈空间

new对象指针用途广泛,比如作为函数返回值、函数参数等

频繁调用场合并不适合new,就像new申请和释放内存一样

释放new分配的空间时用delete进行删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值