delete free

new<-->delete
malloc<-->free

free的确释放了对象的内存,但是不调用对象的析构函数,所以如果在对象中使用new分配的内存就会泄露
delete不仅释放对象的内存,并且调用对象的析构函数

在delete内部仍调用了free

但是两者是不一样的。 
1,malloc和free是函数,而new和delete是运算符。
MSDN Library关于malloc和free函数定义
void *malloc(    size_t size );//Allocates memory blocks.
void free( void* memblock );//Deallocates or frees a memory block.
MSDN Library关于new和delete说明
new keyword by C++
Allocates memory for an object or array of objects of type-name from the free store and returns a suitably typed, nonzero pointer to the object.
delete keyword by C++
Deallocates a block of memory.

2,malloc需要手工计算字节数,而new自动计算需要分配的空间
例如:分别用malloc和new分配一个数组内存
int* array_m,array_n;
array_m = malloc(10*sizeof(int));
array_n = new int[10];

3,malloc 失败返回 NULL, 而new 失败抛出异常
array_m = malloc(10*sizeof(int));
if(array_m!=NULL){
     printf("Allocates memory succeed/n");
}
else{
     printf("Allocates memory error/n");
}

4,malloc 功能分配内存,而new功能包括调用对应对象的析构方法和分配内存.

你可能感兴趣的:(C++,delete,library,null,object,c)