new与malloc比较与底层实现

本文探讨了C++中的new与malloc在内存分配和对象构造上的区别。new运算符不仅分配内存,还负责调用构造函数,而malloc仅分配内存。new的重载形式operator new()可以被类或全局重载,placement new用于特殊场景下的内存分配。new相对于malloc提供了类型安全和构造功能,而malloc则需要手动计算内存大小并进行类型转换。new与delete是一对操作,包含了构造、析构和内存释放,而malloc与free仅处理内存管理。
摘要由CSDN通过智能技术生成

new与malloc比较与底层实现

1.new与 operator new() 关系,placement new 作用
new指C++里通常用运算符,不可重载,比如A* a = new A; (1)调用:operator new()分配内存,(2)执行构造函数,返回指向分配内存的指针
operator new():指对new的重载形式,它是一个函数,并不是运算符。对于operator new来说,分为全局重载和类重载,全局重载是void* ::operator new(size_t size),在类中重载形式 void* A::operator new(size_t size),重载后形参可能发生变化的。
A* a = new A 的调用过程为:(1)分配内存:调用operator new()分配内存,如果是类重载则是调用如果类A重载了operator new,那么将调用A::operator new(size_t ),如果没有重载,就调用全局::operator new(size_t ),事实上都是调用系统默认的全局::operator new(size_t size),调用malloc分配内存,并且返回一个void*指针。此外,类重载可以只是指定了内存分配失败的调用的new_handler处理函数,改写为global_new_handler,类对象析构后之后global_new_handler复位,分配失败抛出异常。(2)构造函数:执行构造函数,返回指向分配内存的指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值