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;
将调用默认的构造函数。