new malloc区别
时间: 2023-11-27 22:50:10 浏览: 93
malloc和new都是用于动态分配内存的关键字,但在C和C++中有一些区别。
1. 语法:
- malloc: 在C中使用,语法为`void* malloc(size_t size)`,需要手动指定要分配的内存大小,并返回一个指向分配内存的指针。
- new: 在C++中使用,语法为`new Type`或`new Type[size]`,可以自动计算所需的内存大小,并返回一个指向分配内存的指针。在分配单个对象时使用`new Type`,在分配对象数组时使用`new Type[size]`。
2. 内存分配:
- malloc: 分配的内存是以字节为单位的连续块,不会自动初始化为默认值。
- new: 分配的内存可以是任意类型的对象,并且会自动初始化为默认值。使用`new Type`时,分配的内存足够容纳一个对象;使用`new Type[size]`时,分配的内存足够容纳一个对象数组。
3. 错误处理:
- malloc: 如果分配失败,返回NULL指针。
- new: 如果分配失败,会抛出std::bad_alloc异常。
4. 内存释放:
- malloc: 使用free函数手动释放已分配的内存。
- new: 使用delete关键字释放通过new分配的单个对象;使用delete[]关键字释放通过new[]分配的对象数组。
需要注意的是,C++中可以使用malloc和free函数来分配和释放内存,但不能在malloc分配的内存上直接调用类的构造函数和析构函数。同样,不能在使用new分配的内存上调用free函数进行释放。建议在C++中使用new和delete关键字进行动态内存分配和释放,以便正确处理对象的构造和析构过程。
阅读全文