`new/delete`和`malloc/free`之间有什么关系?
相同点:
对于内部数据类型来说,没有构造与析构的过程,所以两者是等价的,都可以用于申请动态内存和释放内存;
不同点:
new/delete
可以调用对象的构造函数和析构函数,属于运算符,在编译器权限之内;
malloc/free
仅用于内存分配和释放,属于库函数,不在编译器权限之内;
new
是类型安全的,而malloc
返回的数据类型是void *
,所以要显式地进行类型转换;
new
可以自动计算所需字节数,而malloc
需要手动计算;
new
申请内存失败时抛出bad_malloc
异常,而malloc
返回空指针。