堆上分配内存malloc 和 free 与new 和 delete

malloc和freenew和delete
特性函数关键字、操作符
类型手动转换类型类型安全
调用函数不调用函数自动调用构造析构函数
分配失败失败返回null失败抛出异常
大小手动指定大小    自动计算大小

        mallocfree 是C语言标准库中用于动态内存分配的函数

#include <stdlib.h>

int main() {
    int* ptr = (int*)malloc(sizeof(int)); // 分配一个整数的内存
    if (ptr == NULL) {
        // 处理内存分配失败的情况
        return 1;
    }
    *ptr = 10; // 使用前需要手动类型转换
    // 使用内存...

    free(ptr); // 释放内存,不需要类型信息
    return 0;
}

         newdelete 是C++中用于对象动态内存分配的操作符。

#include <iostream>

class MyClass {
public:
    int value;
    MyClass() {
        value = 20; // 构造函数中初始化
    }
    ~MyClass() {
        std::cout << "MyClass destroyed." << std::endl; // 析构函数
    }
};

int main() {
    MyClass* obj = new MyClass; // 分配对象内存并调用构造函数
    // 使用对象...
    std::cout << obj->value << std::endl; // 输出: 20

    delete obj; // 释放对象内存并调用析构函数
    return 0;
}
  1. 语言特性
    • malloc 和 free 是C语言的一部分,也被C++支持,但它们不执行类型安全检查和构造函数或析构函数调用。
    • new 和 delete 是C++的操作符,用于对象的内存分配和释放。它们执行类型安全检查,并调用对象的构造函数和析构函数。
  2. 类型安全
    • 使用 malloc 和 free 时,需要手动指定所需的数据类型来转换指针。
    • new 和 delete 自动处理类型信息,提供类型安全。
  3. 构造和析构
    • malloc 不调用构造函数,free 不调用析构函数。
    • new 调用对象的构造函数,delete 调用对象的析构函数。
  4. 内存分配失败
    • malloc 在内存不足时返回 NULL 指针。
    • new 在内存不足时抛出一个 std::bad_alloc 异常。
  5. 使用范围
    • malloc 和 free 可用于分配任意类型的内存,包括非对象数据。
    • new 和 delete 主要用于对象的内存分配和释放。
  6. 内存分配大小
    • malloc 需要分配的大小(以字节为单位)作为参数。
    • new 根据对象类型自动确定所需大小

当C++中创建动态数组时,使用new[] 删除时使用delete[

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值