new和delete

来源:互联网 发布:淘宝15天自动确认收货 编辑:程序博客网 时间:2024/06/06 05:35


在内存管理上,C++ 和 C 有着完全不同的两套方案。当然,C++的总是同时兼容C。C的那一套方案在C++里同样可行。

我们首先看看纯C++的那一套: new  delete

 new ,从字面上看意思为 “新”;而delete 字面意思为“删除”。二者在C++中内存管理中大致的功能,应是一个为“新建”,一个为“删除”。
 
201new
 
new  c++ 的一个关键字。被当作像 +、-、* 、/ 一样的操作符。它的操作结果是在申请到一段指定数据类型大小的内存。
 
语法:  指针变量 = new 数据类型;
 
new 将做三件事:
1、主动计算指定数据类型需要的内存空间大小;
2、返回正确的指针类型;
3、在分配内存的一,将按照语法规则,初始化所分配的内存。
 
这是什么意思呢?看看例子吧:
int* p;  p = new int;
 
和以往不一样,p 这回不再“寄人篱下”,并不是指向某个已存在的变量,而是直接指向一段由new 分配而来的新内存空间。
 
指向一段由new 分配而来的新内存空间” 这句话等同于:
new 分配一段新的内存空间,然后将该内存空间的地址存入到变量p中。”
所以,最终p中仍然是存储了一个变量的地址,只是,这是一个“无名”变量。
 
指向原有的某个变量,和指向一段新分配的内存空间,有什么区别呢?
“原有的变量”,可以比喻成指向一间原有的,并且有主的房间。“新分配的内存空间”,则像是一个“临时建筑物”我们必须在不用它的时候,主动将它拆迁。拆迁的工作由delete来完成。

当指针变量通过 new ,而得到一个内存地址后,我们就可以像以前的所说的,通过该指针,通过*号,而对该内存地址(一个无名的变量),进行   操作。

如:

int* p = new int

*p = 100;

cout << *p << endl;
 屏幕将输出100。


new 时初始化内存的值

new 也可以在申请内存空间时,直接设置该段内存里要放点什么.

语法:

 指针变量 = new 数据类型(初值);

 这样,上例可以改为:

 int* p = new int(100);

  cout << *p << endl;

 如果你申请的是字符类型的空间,并且想初始化为‘A':
 
    char* pchar = new char('A');


语法:
  delete 指针变量;
 delete 将释放指定指针所指向的内存空间。
  举例:
 int* p;
  p = new int;
 *p = 100;
  cout << *p << endl;
 delete p;
 system("PAUSE");
 注意,当一个指针接受delete操作后,它就又成了一个“指向不明”的指针。尽管我们可以猜测它还是指向“原来的房子”,然而,事实上,那座“房子”已经被delete “拆迁”掉了。


当指针变量通过 new ,而得到一个内存地址后,我们就可以像以前的所说的,通过该指针,通过*号,而对该内存地址(一个无名的变量),进行操作。

如:

int* p = new int;

*p = 100;

cout << *p << endl;

 

屏幕将输出100。

0 0
原创粉丝点击