相同点
●都可用于内存的动态申请和释放
●new和malloc都可以分配指定大小的内存块,并且分配的内存都在堆上。
●new和malloc的结果都返回一个指向已分配内存的指针。
●都允许使用字面量作为参数来分配内存。
不同点
●前者是C++运算符,后者是C/C++语言标准库函数
●new自动计算要分配的空间大小,malloc需要手工计算
●类型检查不同:new
会进行类型检查,确保在分配内存时,所分配的内存是正确的类型。如果类型不匹配,new
会抛出一个 std::bad_alloc
异常。而 malloc
不提供类型检查,可能会导致运行时错误。
●构造函数:new
会在分配内存后调用对象的构造函数(如果有定义)。这意味着在使用 new
分配的对象时,其成员变量已经被正确初始化。而 malloc
在分配内存后不会调用构造函数,因此需要手动为对象的成员变量赋初值。
●内存管理:new
和 delete
负责管理动态分配的内存。当使用 new
分配内存时,需要使用 delete
delete对指针所指对象运行适当的析构函数释放已分配的内存;同样,当使用 malloc
分配内存时,需要使用 free
释放已分配的内存。这有助于避免内存泄漏和悬空指针问题。
●new是封装了malloc,直接free不会报错,但是这只是释放内存,而不会析构对象
●异常处理:new
会抛出异常(如上述所述)以指示内存分配失败。而 malloc
可能返回一个空指针(即 NULL
),或者返回一个无效的内存地址,这可能导致其他类型的错误。
总之,new
更安全、更易于维护,并提供了类型检查和自动内存管理功能。然而,它也具有一定的开销,因为它需要调用构造函数并负责释放内存。在许多情况下,使用 malloc
可能更适合,特别是在性能要求较高的场景中。