malloc是c自带的函数,用于分配内存。而new 是cpp的关键字,不仅分配内存,还做初始化,另外在cpp中,还可以直接类名()方式创建对象,它们有什么区别呢?
new 和 malloc
| new | malloc |
|---|---|
| 不需要指定内存大小,编译器根据类型自动计算 | 需要传入字节大小 |
| 返回的是类型匹配的指针,不需要类型转换 | 返回的是空类型指针,需要强制类型转换 |
| new内存分配失败时,会抛出异常 | 分配内存失败时返回NULL |
| 可以用于初始化对象 | 只管分配内存,并不能对其进行初始化 |
new 和 直接类名创建对象
new和直接类名创建对象方式的区别如下:
-
使用new关键字创建的对象会赋值给类指针,该指针用途广泛,比如作为函数返回值、函数参数等;
-
使用new关键字创建的对象在使用完成后,必须要使用delete销毁该对象,否则会造成内存泄露(new申请的对象,只有调用到delete时才会执行析构函数);而直接使用类名创建的对象,则不需要手动销毁该对象,因为该类的析构函数会自动执行;
-
频繁调用对象的场合就不太适合使用new方法创建对象,因为还需要手动delete
-
使用new关键字创建的对象使用的是堆空间;而在局部、直接使用类名创建的对象则使用栈空间