c++ >> new 操作符

一.使用 new 分配内存

 变量是在编译时分配的、有名称的内存,而指针只是为可以通过模拟过程直接访问的内存提供了一个别名。指针的真正的用武之地在于,在运行阶段分配未命名的内存用以存储值。在这种情况下,只能通过指针来访问内存。在C语言中,可以用库函数malloc()来分配内存;在C++中任然可以这样做,但C++还有更好的方法——new操作符。

  int *p = new int;    

  new int 告诉程序,需要合适存储int 的内存。new操作符根据类型来确定需要多少字节的内存。然后,它找到这样的内存,并返回其地址。接下来,降地址赋给p,p是被声明为指向int的指针。现在,p是地址,*p是存储在哪里的值。

  释放内存的时候,直接 delete p; 

二.使用 new 来创建动态数组

  int * pn = new int[10];  

  delete [] pn; 

  new 操作符返回第一个元素的地址。

  使用new 和 delete 时,应遵循以下原则:

  1. 不要使用 delete 来释放不是 new 分配的内存。

  2. 不要使用 delete 释放同一个内存块两次。

  3. 如果使用 new [] 为数组分配内存,则应使用 delete[] 来释放。

  4. 如果使用 new [] 为一个实体分配内存,则应使用 delete 来释放。

  5. 对空指针应用 delete是安全的。

.使用 new 来创建动态结构

struct things
{
    int a;
    int b;
};

things * p = new things;  // 这将把足以存储 things 结构的一块内存地址赋给 p; 这种语法和C++的内置类型完全相同。

  

四.使用new 初始化对象

通常,如果 Class_name是类,value的类型为Type_name,则下面的语句:

Class_name * pclass = new Class_name(value);

将调用构造函数:

Class_name(Type_name);

这里可能还有一些琐碎的转换,如:

Class_name(const Type_name &);

Class_name *ptr = new Class_name;   

将调用默认的构造函数。

posted @ 2018-09-15 21:09  hu9977  阅读(174)  评论(0编辑  收藏  举报