new
是C++语言中用来动态申请内存的关键字,返回的是申请到的内存单元的地址
。使用方式为:
指针变量名 = new 要存储数据的类型
e.g.
int*add = new int ;
*add = 121;
# 或者直接赋值
int*add = new int(121);
举个简单的例子:
int * addr = new int;
*addr = 121;
print(%d, *addr);
>> 121
- 现在知道了
new
是动态申请内存的关键字,但是它与静态申请内存的方法有什么不同呢?
- 当我们定义一个变量时,该变量的值是存储在栈中的,而使用动态申请内存的方式去存储变量,该变量是存放在堆中的。堆中的内存可以根据自己的需要而改变,而栈中的内存是固定不可变的,
- 将值放入该内存的方式不同,比如
int *addr_dynamic = new int;
int *addr_static;
int a = 15;
*addr_dynamic = 121;
*addr_static = 122; // !!!该行会报错!!!
# 正确方式
addr_static = &a;
*addr_static = 121;
也就是说,int *addr_static;
只是声明了一个指针,即声明了一块可以存放内存地址大小的内存,但是该内存里并没有东西,所以只能先给他分配内存,即代码中的addr_static = &a;
的操作,然后才能赋值。
3. 动态分配内存的方式虽然很方便,但是系统不会自动销毁内存,只能手动释放,释放内存使用delete
关键字。
int* addr = new int(3);
delete addr;
待续。。。