malloc、free与new、delete

        在C++中,内存管理可以通过两种方式进行:C风格的内存管理(使用 malloc 和 free)以及C++风格的内存管理(使用 new 和 delete)。下面是对这两种方式的详细解释和示例代码。

malloc 和 free

    malloc 和 free 是C语言中的内存分配和释放函数,它们在C++中也可以使用。

  • malloc:分配指定字节数的内存,并返回指向这块内存的指针。
  • free:释放之前用 malloc 分配的内存。
示例代码
#include <iostream>
#include <cstdlib> // 包含 malloc 和 free 的头文件

int main() {
    // 使用 malloc 分配内存
    int* ptr = (int*)malloc(sizeof(int) * 5); // 分配5个int大小的内存
    if (ptr == nullptr) {
        std::cerr << "Memory allocation failed" << std::endl;
        return 1;
    }
    // 使用分配的内存
    for (int i = 0; i < 5; ++i) {
        ptr[i] = i * 10;
    }

    for (int i = 0; i < 5; ++i) {
        std::cout << ptr[i] << " ";
    }
    std::cout << std::endl;
    // 释放内存
    free(ptr);
    return 0;
}

new 和 delete

    new 和 delete 是C++中的内存分配和释放运算符。

  • new:分配内存并调用构造函数(如果是对象)。
  • delete:释放内存并调用析构函数(如果是对象)。
示例代码
#include <iostream>

int main() {
    // 使用 new 分配内存
    int* ptr = new int[5]; // 分配5个int大小的内存
    if (ptr == nullptr) {
        std::cerr << "Memory allocation failed" << std::endl;
        return 1;
    }
    // 使用分配的内存
    for (int i = 0; i < 5; ++i) {
        ptr[i] = i * 10;
    }

    for (int i = 0; i < 5; ++i) {
        std::cout << ptr[i] << " ";
    }
    std::cout << std::endl;
    // 释放内存
    delete[] ptr;
    return 0;
}

区别

  1. 类型安全

    • new 是类型安全的,不需要显式地进行类型转换。
    • malloc 返回 void*,需要显式地进行类型转换。
  2. 构造和析构

    • new 会调用构造函数,delete 会调用析构函数。
    • malloc 和 free 只是分配和释放内存,不会调用构造和析构函数。
  3. 异常处理

    • new 在分配失败时会抛出 std::bad_alloc 异常。
    • malloc 在分配失败时返回 nullptr
  4. 语法

    • new 和 delete 是运算符。
    • malloc 和 free 是函数。

总结

        在C++中,推荐使用 new 和 delete 进行内存管理,因为它们更符合C++的面向对象特性,能够自动调用构造和析构函数,并且提供了更好的类型安全性和异常处理机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值