malloc 和 new 区别

malloc 和 new 都是用于在内存中分配空间的方法,但它们有一些重要的区别,特别是在 C 和 C++ 中的使用情况。

语法和类型安全性:

malloc 是 C 语言中的函数,它返回一个 void* 指针,需要显式进行类型转换,并且没有类型检查。
new 是 C++ 中的操作符,它会根据所分配的类型返回正确的指针类型,不需要显式类型转换,并且具有类型安全性。
对象构造和析构:

malloc 分配的内存只是一块原始的字节空间,不会自动调用对象的构造函数。
new 在分配内存的同时会调用对象的构造函数进行初始化,在释放内存时会调用对象的析构函数进行清理工作。
数组分配:

malloc 不支持直接分配对象数组。
new 可以直接分配对象数组,并会为每个对象调用构造函数。
重载和自定义操作:

malloc 本身不能被重载,无法实现自定义的内存分配策略。
new 可以通过重载全局的 operator new 来实现自定义的内存分配策略。
异常处理:

malloc 分配内存失败时返回 NULL,需要手动处理分配失败的情况。
new 分配内存失败时会抛出 std::bad_alloc 异常,可以使用异常处理机制来处理。
总的来说,在 C++ 中,建议优先使用 new 和 delete,因为它们提供了更多的类型安全性、自动构造析构、数组分配等功能。在 C 语言中,则需要使用 malloc 和 free。注意,在 C++ 中也可以使用 malloc,但这样会失去对象的构造析构特性。

你可能感兴趣的:(java,算法,jvm)