C++new与delete以及空指针

1、指针的new操作:
指针在new之后,会在内存堆中分配一个空间,而指针中存放的是这个空间的地址。如:
void main(){
int *p = new int(4);
cout << p << endl;
cout << *p << endl;
}
输出为:
0x00431BF0
4
分别为分配的空间地址和地址内存放的值。
如果写为:
void main(){
int *p = new int(4);
cout << *(int *)0x00431BF0 << endl;
}
输出为:4
程序的意思就是将0x00431BF0内存地址开始的4个byte的块取出转换为int类型输出,即直接读取内存。
2、指针的delete操作:
指针在delete的时候,会将指针指向的内存区域释放掉,而指针同内存区域的联系并没有被切断,仍然会只想原来指向的内存区域。如:
void main(){
int *p = new int(4);
cout << p << endl;
cout << *p << endl;
delete p;
cout << p << endl;
cout << *p << endl;
}
程序输出:
0x00431BF0
4
0x00431BF0

-572662307

可以看到p前后指向的地址是相同的,而指向地址的内存区域被释放。此时,p所指向的值是不确定的(可能指向重要系统内存单元)。

所以,在deletep后,切记要令p=NULL;这样才能真正完成delete操作。
3、空指针:
空指针指向的内存区域为内存的首地址,是不可读写的区域,即空指针不提供操作。删除空指针是安全的(因为它什么也没做)。所以,在写构造函数,
赋值操作符,或其他成员函数时,类的每个指针成员要么指向有效的内存,要么就指向空,那在你的析构函数里你就可以只用简单地delete 掉他们,而不用
担心他们是不是被new 过。如:
void main(){
int *p = NULL;
cout << p << endl;
} //输出0x00000000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值