栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++内存管理——new与delete

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++内存管理——new与delete

目录

C++与C内管管理的区别:

new与delete的底层操作:

operator new/delete:


C++的内存管理方式相比较于C语言的malloc、realloc和calloc,C++引入了新的内存管理方式new与delete,相比较于C语言更加方便进行内存管理。

C++与C内管管理的区别:

1.在对于内置类型的内存开辟,new与malloc本质没有本质的区别。但是区别是当内存开辟失败的时候malloc返回的是NULL,而new则是抛异常。

2.在自定义类型的内存开辟中

malloc会在堆上开辟空间,并使用一个指针指向这个空间,但对于自定义类型中的内置类型不会 进行初始化。

new会在堆上开辟空间,对自定义类型中的内置类型会调用自身的构造函数进行初始化操作。

3.malloc与free是函数,而new与delete是操作符

new与delete的底层操作:

new与delete是操作符,在调用时new是call operator malloc,delete是call operator free进行操作

operator new/delete:

operator new的底层是使用malloc进行调用,当malloc成功返回,当失败时抛异常。

operator delete的底层同理。

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);
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/949915.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号