指针和自由空间

new关键字和delete关键字
C语言中使用malloc()函数和free()函数来分配内存和释放内存,在C++中有更好的办法就是使用new和delete关键字,通用的格式为:
typeName *pointer_name = new typeName;
// …
delete pointer_name;
在使用完内存后,用delete关键字可以将其归还给内存池。注意delete只是释放指针指向的内存,但不会删除指针本身,可以将指针重新指向另一个新分配的内存块,但是一定要切记配对地使用new和delete,否则将发生内存泄露(memory leak),也就是说,被分配的内存再也无法使用了。如果内存泄露严重,则程序将由于不断寻找更多内存而终止。另外不要释放已经释放的内存块,这样做的结果将是不确定的,切勿玩火。另外:
int value = 1;
int *p_value = &value;
delete p_value;
释放声明变量所获得的内存是不可以的,只能用delete来释放使用new分配的内存,然而对空指针使用delete是安全的。
int *p1 = new int;
int *p2 = p1;
delete p2;
对于一个内存块可以有多个指针指向它,释放时只需要delete任何一个指针即可,但是尽量不要创建多个指向同一内存的指针。

    创建动态数组
    编译时给数组分配内存被称为静态联编(static binding),运行时创建数组并分配内存称为动态联编(dynamic binding)。格式为:

typeName *pointer_name = new typeName[num_elements];
// …
delete [] pointer_name;
通过指针访问数据:

int *array1 = new int[3];
	array1[0] = 0;
	array1[1] = 1;
	array1[2] = 2;
	cout << "Method 1 :" << endl;
	cout << array1[0] << " " << array1[1] << " " << array1[2] << endl;
	cout << endl;
	delete[] array1;

在这里插入图片描述
note: new 来分配内存 容易产生越界问题,而vector知道自己的大小,则不用担心。
空指针: c++11中专门设定nullptr作为空指针
delete 释放内存两种方式:
1.delete p 释放单个new分配的对象
2. delete [] p 释放new分配的对象数组

小知识:
static_cast 可以用于在两种相关指针类型之间进行转换

viod *p;
int*q = static_cast<int*>(p)

reinterpret_cast 可以用于在两个不相关的类型之间转换,例如:int和double
const_cast 可以“去掉const”

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值