浅谈 malloc/free 和 new/delete

malloc 和 free 是 C 语言中的函数,也可以用在 C++ 中,但在 C++ 中却视为不安全的内存操作。而 new 和 delete 是 C++ 中的两个运算符,完全可以替代 malloc/free 完成内存的操作,且为安全的内存操作。在C++ 中保留 malloc/free 是为了和 C 语言保持兼容,因此在 C++ 中尽量使用 new/delete。它们的区别有以下几点:

  1. malloc / free 为 C/C++ 标准库函数,而 new/delete 为 C++中的运算符。

  2. new 创建的对象有类型,而 malloc 返回 void* 类型,需要强制转换为指定的类型。

  3. new 时会根据制定类型自动计算大小且会调用对象的构造函数完成初始化,而 malloc 只分配指定大小的内存,不进行初始化,其值是随机的。delete 时自动调用对象析构函数,而 free 不会。

  4. new 失败时,会调用 new_handler 处理函数,而 malloc 失败紧返回 NULL,不做善后处理,因此往往需要检查分配是否成功。

int *a = new int[5];
int *b = (int *)malloc(5*sizeof(int));

new 的三种形态:new operator,operator new,placement new。

new operator(new运算符)的执行过程:

  • 通过 operator new 分配内存,默认调用 malloc 分配内存,可重载 operator new 函数;
void *operator new(size_t size);
  • 使用 placement new 调用对象构造函数(内部简单类型(如 int)忽略此步);

  • 返回内存指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值