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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值