不同的地方:
- new 是C++的操作符,而malloc是C的库函数
- new 需要指定类型,而malloc需要指定大小
- 由于第二点,new在分配内存后会调用指定类型的构造函数,而malloc只是分配内存
- new分配内存后,会初始化内存,而malloc不会,所以malloc出来的内存块内容都是随机的东西,必须初始化才能用
- new会返回指定类型的指针,而malloc返回的是void*的指针
- new必须与delete配对使用,而malloc必须与free配对使用
- 与new配对的delete会调用指定类型的析构函数,而与malloc配对的free不会调用,如果free掉的指针继续在用的话,那结果就不可预计了
- new失败是会抛异常,而malloc失败时返回0指针
相同的地方:
- 都是用于向系统申请内存用的
- 对于内部数据类型,比如int,char,float等,没有构造和析构函数,因此用malloc和new其实是一样的
- 都是从堆上分配的内存