目录
- 前言
- 一、C++内存管理方式
- 二、operator new与operator delete函数
- 2.1operator new与operator delete函数
- 二、new和delete的实现原理
前言
C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力而且使用起来比较麻烦,因此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。

一、C++内存管理方式
1.1new/delete操作内置类型
void Test()
{
// 动态申请一个int类型的空间
int* ptr4 = new int;
// 动态申请一个int类型的空间并初始化为10
int* ptr5 = new int(10);
// 动态申请10个int类型的空间
int* ptr6 = new int[3];
delete ptr4;
delete ptr5;
delete[] ptr6;
}
注意:申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[]和delete[]
二、operator new与operator delete函数
2.1operator new与operator delete函数
new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。
/*
operator new:该函数实际通过malloc来申请空间,当malloc申请空间成功时直接返回;申请空间失败,
尝试执行空 间不足应对措施,如果改应对措施用户设置了,则继续申请,否则抛异常。
*/
void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
{
// try to allocate size bytes
void *p;
while ((p = malloc(size)) == 0)
if (_callnewh(size) == 0)
{
// report no memory
// 如果申请内存失败了,这里会抛出bad_alloc 类型异常
static const std::bad_alloc nomem;
_RAISE(nomem);
}
return (p);
}
/*
operator delete: 该函数最终是通过free来释放空间的
*/
void operator delete(void *pUserData)
{
_CrtMemBlockHeader * pHead;
RTCCALLBACK(_RTC_Free_hook, (pUserData, 0));
if (pUserData == NULL)
return;
_mlock(_HEAP_LOCK); /* block other threads */
__TRY
/* get a pointer to memory block header */
pHead = pHdr(pUserData);
/* verify block type */
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
_free_dbg( pUserData, pHead->nBlockUse );
__FINALLY
_munlock(_HEAP_LOCK); /* release other threads */
__END_TRY_FINALLY
return;
}
/*
free的实现
*/
#define free(p) _free_dbg(p, _NORMAL_BLOCK)
通过上述两个全局函数的实现知道,operator new 实际也是通过malloc来申请空间,如果malloc申请空间成功就直接返回,否则执行用户提供的空间不足应对措施,如果用户提供该措施就继续申请,否则就抛异常。operator delete 最终是通过free来释放空间的。
二、new和delete的实现原理
2.1内置类型
如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是:new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申请空间失败时会抛异常,malloc会返回NULL。
2.2 自定义类型
new的原理
- 调用operator new函数申请空间
- 在申请的空间上执行构造函数,完成对象的构造
delete的原理
- 在空间上执行析构函数,完成对象中资源的清理工作
- 调用operator delete函数释放对象的空间
new T[N]的原理
- 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请
- 在申请的空间上执行N次构造函数
delete[]的原理
- 在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理
- 调用operator delete[]释放空间,实际在operator delete[]中调用operator delete来释放空间
相关推荐:
为什么选择B站VIP?让你畅享更丰富的视听体验,小门类网站seo
SEO找词:如何精准找到高效关键词,提升排名和流量,河源网站优化平台
SEO组织:让您的网站流量倍增的秘密武器,seo 绩效标准
ChatGPT无法加载?检查网络并尝试重启,助您快速恢复畅通体验,burj ai
为什么选择老域名工具?提升网站SEO与品牌影响力的秘密武器,软文与seo文章区别
seo站内优化包括什么营销,seo站内优化操作流程 ,ai 玻璃图标
ChatGPT出现错误503?你需要知道的解决方案和应对策略,ai拉伸字效
SEM做得好可以取代SEO吗?浅析两者的异同与未来趋势,王道ai
AI提炼主要内容:如何让信息更精准、高效、易懂,女军人ai
wordpress seo是什么,wordpress建站seo好做吗 ,学习图文ai
企业关键字-助力企业成功的隐形动力,闽侯县企业网站建设
AI写作技巧,让创作事半功倍!
仿写AI:智能时代的创作革命,洛江区移动房网站推广
AI人工智能:开发与应用的必备软件推荐
怎么降低文章的AI生成率:打造更真实、更有价值的内容
SEO这种营销方式,改变你网站流量的秘密武器,佛山网站设计建设
seo读什么书,seo是哪个专业的 ,亚洲9ai吧
OpenAI银行卡扣款的公司是哪家?揭秘背后的支付流程与安全保障,AI素描相片
ChatGPT连了外网也登不了?如何解决这一问题,重新畅享AI助力!,ai少女大瓜
怎么用AI生成文章?全新写作方式的揭秘与应用指南
中文润色:提升表达的艺术,打造无懈可击的语言魅力,广告营销推广新思路论文
ChatGPT内部HTTP接口文档-为开发者提供高效便捷的AI服务接入方式,安屿ai
SEO优化如何提升网站排名,驾驭搜索引擎流量,三亚网站推广方法
SEO新人必读:从零开始SEO的核心技巧与实践指南,网站邮件推广设计
打造高效创作体验,写文章AI软件重塑内容生产力
ChatGPT为什么访问不了?全面解析及解决方案,ai首页设计
《SEO教材:打造网站流量的核心利器,教你轻松SEO优化技巧》,咖啡网站建设总结文案
SEO新闻:2025年最新趋势与最佳实践,你不可错过的SEO战略,郑州网络营销推广的优势
SEO教育:搜索引擎优化,开启成功职业之路,搜狗SEO排名接单
AI搜索写文章:一丝丝智慧背后的无限可能,电脑免费ai写作神器
seo都有什么问题,seo都有什么问题和答案 ,ai凯旋公主下载
ChatGPT界面看不到用户:隐秘的互动方式与智慧的背后,AI和UR
怎么用AI生成一篇文章?高效创作指南全揭秘!
OpenAIGPT:开启智能时代的语言革命,ai辣妹动漫
seo资源指的是什么,seo资料 ,绿眼AI
优化服务网-提升客户体验,打造全方位智慧服务平台,东莞网站建设员招聘信息
SEO专业怎么样?未来发展的无限潜力与职业前景,联通ai智能早教
SEO是什么意思?揭秘SEO的真正含义与重要性,公司推广网站询问d火18星来
seo网站通过什么软件,网站seo软件哪个 ,战团ai
GPT怎么收费?揭秘AI技术的定价与价值,ai报考高考
SEO查:如何通过精准优化让网站流量飞速增长,吉林推广营销怎么样
SEO怎么优化比较好?全面提升网站排名的实用技巧,高级ai玩家
ChatGPT使用问题?如果您正在使用VPN,请尝试将其关闭,ai制作渐变立体
seo网站反链是什么,网站反链怎么做 ,ai插画头像卡通
互联网快排:助力企业网站流量爆发的秘密武器,西安网站建设找资源公司
在线AI文章生成器开启智能创作新时代
ChatGPT维护页面-背后的技术与用户体验,ai领域ppt
AI网页效果生成:开启网站设计的新纪元,ai画线祥云
为什么seo对企业重要,seo对企业进行网络营销的价值 ,ai李沁换脸鲍鱼
优化,让生活与工作更高效-从个人到企业的全面升级,广州百度seo费用