malloc 与 new
时间: 2023-11-27 10:35:03 浏览: 34
malloc和new都可以用于动态分配内存空间,但是二者有很大的不同。
1. malloc是C/C++语言中的函数,而new是C++中的运算符。
2. malloc分配的内存空间必须手动释放,而new分配的内存空间由C++的垃圾回收机制自动回收。
3. malloc只分配内存空间,而new除了分配内存空间外,还会调用对象的构造函数,完成对象的初始化。
4. malloc返回的是void*类型的指针,需要进行类型转换,而new返回的是对象类型的指针。
总之,使用new可以更加方便、安全地分配和释放内存空间,而且还可以自动调用对象的构造函数。而malloc则需要手动释放内存空间,容易出现内存泄漏和指针问题。
相关问题
malloc与new
malloc和new都是用于在程序运行时动态分配内存的方法,但是它们有一些不同之处。
1. malloc是C语言中的函数,而new是C++中的运算符。
2. malloc需要手动指定要分配的内存大小,而new会根据所需类型自动计算大小。
3. malloc返回的是void指针,需要进行类型转换后才能使用,而new返回的是所需类型的指针。
4. malloc分配的内存需要手动释放,而new分配的内存会在对象销毁时自动释放。
使用malloc分配内存的示例代码如下:
```
int* ptr = (int*)malloc(sizeof(int));
if (ptr != NULL) {
*ptr = 10;
// 使用ptr指向的内存
free(ptr); // 释放内存
}
```
使用new分配内存的示例代码如下:
```
int* ptr = new int;
if (ptr != nullptr) {
*ptr = 10;
// 使用ptr指向的内存
delete ptr; // 释放内存
}
```
new 与malloc区别
`new` 和 `malloc` 都是用于动态分配内存的函数,但是它们有一些区别:
1. `new` 是 C++ 中的关键字,而 `malloc` 是 C 标准库中的函数。
2. `new` 是运算符,`malloc` 是函数。
3. `new` 会自动调用对象的构造函数,而 `malloc` 不会。
4. `new` 返回的是具体类型的指针,而 `malloc` 返回的是 `void` 类型的指针,需要进行类型转换。
5. `new` 可以重载,而 `malloc` 不能。
6. `new` 不需要指定分配的内存大小,它会根据类型自动计算所需内存大小,而 `malloc` 需要显式地指定分配的内存大小。
7. `new` 会抛出异常,而 `malloc` 只能返回 `NULL`。
总的来说,`new` 更加方便和安全,能够完成比 `malloc` 更多的任务,也是 C++ 中推荐使用的内存分配方式。