C++复习03(new、malloc、模版、继承和多态、同名隐藏)

本文详细探讨了C++中的new运算符与malloc的底层实现,包括new/delete与new[]/delete[]的区别。同时,介绍了定位new表达式的用法。接着,文章阐述了模版的概念、泛型编程的优势,以及函数模版的隐式与显式实例化。此外,还详细讲解了继承和多态的基本原理,包括继承权限、赋值兼容规则和同名隐藏现象。
摘要由CSDN通过智能技术生成
new:

1.调用operator new 申请空间
void * operator new(size_t size)
{
while(nulltr == p==malloc(size); )
a.申请成功,直接返回
b.申请失败,检测用户是否设置空间不足的应对措施(函数指针)
设置:继续循环申请,直到申请成功
未设置:剖析异常

2.调用构造函数对申请成功的空间进行初始化
delete p:p所指向的一定是new堆内存空
调用对应的析构函数释放对象中的资源
调用void operator delete(void* p)

malloc底层实现原理
new/delete和new[]/delete[]

new T:
1.调用void *operator new(size_t size)
{malloc循环申请–>申请成功,直接返回
申请失败–提供空间不足的应对措施(用户提供)
提供:循环申请
未提供:抛异常

例子:学生向家中要生活费 家中有钱-给 家中没钱-a. 有条件的情况下,向别人借 b.实在没有办法的话,不借

delete:
1.调用T的析构函数释放对象中的资源
2.void operator delete()释放对象的空间

new T[N]
1.申请空间:void* operator new[](size_t size)—>void* operator new(size_t size)—>循环采用malloc进行申请
2.构造N个对象:调用N构造函数初始化对象

delete[]
1.释放N个对象中的资源:调用N次析构函数
2.释放N个对象的空间:void operator delete[](void* p)—>void operator delete(void* p)—>free

定位new表达式:对已经存在的空间进行初始化

new( p ) T(参数)
1.调用void* operator new(size_t size,void* where)
{
return where;
//不需要真正申请空间,直接将空间返回
}
2.调用T类型的构造函数

模版

1.什么是模版?什么是泛型编程?
写一些与类型无关的代码,通俗一点说就是一个造东西的模具,只要给不同的材质,就会出现相对应材质的东西。
模具-----塑料-----塑料实体
函数模版/类模板----实例化----实体:处理具体类型的函数或者类

泛型是通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。
泛型的优点:

  • 可以做到最大的代码重用、保护类型的安全以及提高了程序运行的性能;
  • 可以创建集合类;
  • 可以创建自己的泛型接口、泛型方法、泛型类、泛型事件和泛型委托。
  • 可以对泛型类进行约束,以访问特定数据类型的方法。
  • 关于泛型数据类型中使用的类型的信息,可在运行时通过反射获取。
    模版是泛型编程实现的一种手段。

2.函数模版

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值