标签:
1、在C++中,一般都用new/delete来申请和释放内存,对于以下几种new的用法,各自的区别是什么呢?
int *p1 = new int; int *p2 = new int(); int *p3 = nre int(1); // define class A; A *p4 = new A; A *p5 = new A(); A *p6 = new A[10]; A *p7 = new A[10]();
new A | new A() | new A(parameters) | |
A为内置类型 | 无初始化操作 | 进行值初始化,例A为int类型,则初始化为0 | 进行值初始化,A被初始化为parameters |
A为class/struct | 调用默认构造函数,A中的成员是否初始化依赖于构造函数的实现 | 若自定义了默认构造函数,则调用自定义的默认构造函数,否则调用系统默认构造函数,并对A中的成员进行值初始化 | 调用A的自定义构造函数 |
因此上面的代码的执行结果分别为:
2、C++ 中new一个数组,释放的时候的写法注意。
class A { public: int a; }; int main() { A *p = new A[10]; // p 指向一个拥有10个A实例的地址 delete p; // 释放一次 delete []p; // 释放10次 return 0; }
new []返回的地址会后移4个字节,并用那4个存放数组的大小!而new不用后移这四个字节
delete[]根据那个4个字节的值,调用指定次数的析构函数 ,同样delete也不需要那四个字节
标签:
原文地址:http://www.cnblogs.com/shark-cf/p/5451402.html