C++之new的详解

目录

定义

输出结果

new使用方法

new创建对象

代码样例

输出结果

new()的意义

代码样例

输出结果

new开辟一维数组空间

代码样例

输出样例

new开辟二维数组空间

总结


定义

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

#include
#include
using namespace std;
int main(){
    int *p=new int;
    *p=5;
    cout<<*p;
    return 0;
} 

输出结果

5

new使用方法

new创建对象

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

代码样例

#include
#include
using namespace std;
int main(){
    int *str=new int;
    *str=10;
    cout<<*str;
    return 0;
} 

输出结果

10

new()的意义

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

代码样例

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

输出结果

3

new开辟一维数组空间

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

代码样例

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

输出样例

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进行删除。

你可能感兴趣的:(c++,算法,数据结构)