简单说一下new 跟 malloc的差别并举例
时间: 2023-07-19 15:05:07 浏览: 74
`new` 和 `malloc` 都是动态分配内存的方法,但它们的实现和使用方法有一些不同。
`new` 是 C++ 中的运算符,用于在堆上动态分配对象。使用 `new` 时,需要指定要分配的对象的类型,并返回对该对象的指针。 `new` 还会自动调用对象的构造函数,用于初始化对象的成员变量。例如,在 C++ 中使用 `new` 创建一个 int 类型的对象并将其初始化为 0,可以这样写:
```
int* p = new int(0);
```
而 `malloc` 是 C 标准库中的函数,用于在堆上分配指定大小的内存块。使用 `malloc` 时,需要传入要分配的内存块的大小,并返回一个指向该内存块起始地址的指针。 `malloc` 不会调用对象的构造函数,所以分配的内存块中的数据是未初始化的。例如,在 C 语言中使用 `malloc` 分配一个大小为 10 的 int 数组,可以这样写:
```
int* p = (int*)malloc(10 * sizeof(int));
```
需要注意的是,在使用 `malloc` 分配内存后,需要手动调用构造函数来初始化对象,否则可能会导致未定义行为。
因此,`new` 和 `malloc` 的主要区别在于:
- `new` 可以自动调用对象的构造函数,而 `malloc` 不会。
- `new` 返回对对象的指针,而 `malloc` 返回对内存块的指针。
在 C++ 中,应该优先使用 `new` 和 `delete` 来动态分配和释放内存,因为它们可以自动调用对象的构造函数和析构函数,更方便和安全。在 C 语言中,可以使用 `malloc` 和 `free` 来动态分配和释放内存。
阅读全文