new的一点儿记录

看Java中定义数组时使用new在堆中开辟内存并存储数组内容,想到c++中也有new,大概查了下发现有三种用法,以下贴查到的内容记录一下,后面用到的时候再回来仔细看。
另外,C++中operator new跟C中的malloc有点儿像,有的地方说operator new的底层实现可以是malloc。new可以说是个一个关键字,也可以说是一个运算符,并且可以被重载。

C++提供了一种“动态内存分配”机制,使得程序可以在运行期间,根据实际需求,要求操作系统临时分配一片内存空间用于存放数据;

通过new运算符来实现;

new实现一维指针:

1 int * P;
2 P = new int; //开辟一个存放整数的空间,并返回一个存储空间的地址(即指针);
3 * P = 5;
4
5 int * P = new int(5); //与上相等
6 int * Y = new int;
7 int * Y = new int(100); //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个该存储空间的地址;

分配一个任意大小的数组:

1 T * P;
2 P = new T[N]; //T是任意类类型名, N代表元素个数
3
4 int *A = new int[10]; //开辟一个存放10个整数(数组)的空间,返回首元素的地址 二维数组: (以5行5列的矩阵为列)

1 int i;
2 int row = 5,list = 5;
3 int **Matrix;
4 // Matrix = new int *[row]; //给一维指针开辟空间
5 * Matrix = new int[row]; //给一维指针开辟空间
6 for(i = 0;i<row;i++)
7 Matrix[i] = new int [list]; //第二维空间开辟
8 // *(Matrix+i) = new int [list]; //第二维空间开辟 一维二维的两种方式均可使用;

1 int * Matrix = new int[row * list]; //当成一维数组连续开辟 简化二维指针的开辟,通过 Matrix [ i * (list + 1) + j ]来访问第i行第j列的数据;

开辟指针的释放:

1 int * P = new int;
2 * P = 5;
3 delete P;
4
5 int * P = new int[10];
6 P[0][0] = 1;
7 delete [] P;
用new运算符动态分配的内存空间,要用delete运算符释放,否则,会出现“内存泄漏”;

上述矩阵的释放方式:

1 for(i = 0;i < row;i++)
2 delete [] Matrix[i];
3 delete [] Matrix;
4
5 //
6 //
7 delete [] Matrix;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值