C++
new:
int* p = new int; // *p = ?(未初始化,debug模式下*p = 0xCCCCCCCC)
int* p = new int(); // *p = 0
int* p = new int(a); // *p =a(a是某integer)
int* p = new int[n]; // 动态数组中各元素 = ?(未初始化)
int* p = new int[n](); // 动态数组中各元素 = 0
int* p = new int[n](a); //编译不通过
delete:
delete基础类型时,可以不用delete[],但delete类时要用delete[],因为delete[]会调用动态数组中储存的所有对象的析构函数
delete NULL不会有问题。使用多态时,delete基类指针时除非析构函数是虚函数,否则只会调用基类的析构函数,因此析构函数最好用虚函数。
C
free:释放动态数组,free(NULL)不会有问题
malloc:不初始化元素
calloc:初始化所有元素为0
realloc:改变动态数组大小(新的size要大于原来的size)
_alloca:在栈上而非堆上申请内存