new和delete
C++中new和delete是运算符,不是函数,执行效率高。
C语言中malloc()和free()是函数,标准库stdlib.h中。
new会在堆上初始化一个对象时会触发对象的构造函数,malloc不能。
delete会触发对象的析构函数,free不能。
delete释放的是对象的空间,析构函数释放的是对象中某个或某些指针所指向的空间,所以delete执行时先触发析构再释放整个对象。
new出的空间也可以用free释放,但是下图的情况,如果free(tp)只会tp指向的堆空间,会造成p指向的堆空间泄露,使用delete就不会出现这个问题,因为它会触发析构函数。