new与malloc分配内存的区别?
时间: 2024-06-05 17:11:58 浏览: 106
`new` 和 `malloc` 都是用于在运行时动态分配内存的函数。它们的主要区别在于以下几个方面:
1. `new` 是 C++ 中的运算符,而 `malloc` 是 C 语言库函数。因此,在 C++ 中,通常建议使用 `new` 来分配内存,而在 C 语言中则使用 `malloc`。
2. `new` 能够自动计算并分配所需的内存空间,而 `malloc` 则需要手动指定所需的内存大小。
3. `new` 还可以自动调用对象的构造函数进行初始化,而 `malloc` 只是简单地分配一片内存空间,不会进行初始化。
4. `new` 返回的是对象类型指针,而 `malloc` 返回的是 `void` 类型指针。这意味着,在 C++ 中使用 `new` 可以直接进行类型转换,而在 C 语言中则需要显式地进行类型转换。
总的来说,`new` 更加方便和安全,因为它可以自动计算所需内存大小并调用构造函数进行初始化。但是,如果需要在 C 语言中进行动态内存分配,则只能使用 `malloc`。
相关问题
new和malloc有什么区别?
new和malloc都可以用来在堆上分配内存,但是它们之间有几个重要的区别:
1. new是C++的运算符,而malloc是C语言的库函数。
2. new会调用对象的构造函数进行对象初始化,而malloc不会。因此,对于C++类的对象,使用new更为方便。
3. new返回的是类型安全的指针,而malloc返回的是void指针,需要进行强制类型转换。
4. new可以重载,而malloc不能。
5. new抛出异常而不是返回NULL,这使得代码更加健壮。
综上所述,对于C++程序,建议使用new来分配内存,特别是对于需要进行对象初始化的情况。而在C程序中,malloc是唯一的选择。
malloc分配内存和new分配内存有什么区别
1. 语法不同:malloc是C语言中的函数,需要使用头文件stdlib.h来调用;而new是C++中的关键字,不需要包含任何头文件。
2. 返回类型不同:malloc返回的是void*指针类型,需要进行强制类型转换;而new返回的是具体类型的指针,不需要进行强制类型转换。
3. 分配内存的方式不同:malloc只负责分配内存,不会自动调用构造函数,需要手动初始化对象;而new则会调用构造函数来初始化对象。
4. 内存越界检查不同:malloc分配内存时不会检查数组越界问题,而new会检查是否越界。
5. 内存释放方式不同:malloc分配的内存需要使用free函数进行释放;而new分配的内存需要使用delete关键字进行释放。
总的来说,new分配内存相对于malloc更加方便、安全,而且可以自动调用构造函数进行对象初始化,是C++中更为推荐的内存分配方式。但是,在一些特定的场景下(比如需要与C语言代码进行交互),还是需要使用malloc。
阅读全文