内存管理+模板初阶

目录

1.内存管理

1.C/C++内存分布

2.new与delete

2.1 new与delete的用法

2.2 new与malloc的区别,delete与free的区别

3.new与delete的底层实现原理

operator new与operator delete的使用:

4.定位new

2.模板初阶

2.1 函数模板

函数模板的实例化:

模板参数的匹配规则:

2.2 类模板


1.内存管理

1.C/C++内存分布

C/C++中的内存区域可分为以下几个:

1.栈区:主要储存函数的参数,局部变量,返回数据,返回地址。栈区的数据会在函数结束时由编译器自动清理。栈区的内存地址从高地址向低地址开辟,向下增长。

2.堆区:主要储存动态开辟的变量,堆区的数据必须由程序员自己清理。堆区的内存地址从低地址向高地址开辟,向上增长。

3.数据段(静态区):主要储存全局变量,静态变量。程序结束数据由编译器释放。

4.代码段(常量区):存放函数体(类成员函数和全局函数)的二进制代码。只读常量。

2.new与delete

2.1 new与delete的用法

2.2 new与malloc的区别,delete与free的区别

对于自定义类型而言,malloc只是单纯的开辟一个空间,而new会开辟一个空间后调用自定义类型的构造函数。free只会释放该空间,而delete会先调用该变量的析构函数再释放该空间。

3.new与delete的底层实现原理

new是一个操作符,本质是调用全局函数operator new来开辟空间,对于自定义类型,会调用其构造函数。delete是一个操作符,对于自定义类型,会调用其析构函数,再调用全局函数operator delete来释放空间。

operator new与operator delete的使用:

operator new本质上是通过malloc开辟空间,不同的是,malloc申请空间失败会返回空指针,而operator new会抛异常。

operator new与operator delete是对malloc与free的封装。

operator new []实际上是对operator new的多次调用,operator delete[]是对operator delete的多次调用。

4.定位new

定位new是在一个已原始分配的内存空间上调用构造函数初始化一个对象。

2.模板初阶

泛型编程是一种软件工程方法论,它强调使用高度抽象的方式来编写算法和数据结构,使得同一套代码可以适用于多种数据类型。模板是实现泛型编程的基础。

2.1 函数模板

实现任意类型两个数相加:

函数模板的实例化:

函数模板的实例化是指编译器遇到模板函数时,会通过函数参数类型自动推导出模板参数类型,生成对应的模板函数。函数模板的实例化在编译时进行实行。

模板参数的匹配规则:

1.如果传入的函数参数与非模板函数匹配,那么编译器会优先调用非模板函数。

2.如果传入的函数参数可以与模板函数参数匹配,那么编译器会调用该模板函数。

2.2 类模板

模板类的使用必须在实例化对象时指明模板参数类型。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值