c++基础

C语言编译过程

  1. 预处理:进行#include头文件以及宏定义替换
  2. 编译:将经过预处理之后的程序转换成汇编代码
  3. 汇编:将汇编代码转换成机器码,这一步产生二进制目标文件
  4. 链接:将多个目标文件以及所需的库文件链接成最终的可执行文件

CPP内存管理

  1. 静态内存区
    • 类static数据成员
    • 局部static对象
    • 定义在所有函数体之外的变量
  2. 栈内存区:函数体内部非 static 变量。
  3. 堆内存区:程序员动态分配(new、 delete)的对象。

智能指针

无论函数是否正常结束,智能指针都能确保资源被释放。而使用内置指针管理内存时,若在 new 之后,在 delete 之前发生异常,则内存不会被释放。

shared_ptr

允许多个指针指向同一个对象。
原理:引用计数。每个 shared_ptr 底层都有一个关联的计数器。一旦计数器为0,它会自动销毁所管理的对象,自动释放相关内存。

unique_ptr

独占所指对象
不支持普通的拷贝或赋值。例外:可以拷贝或赋值一个即将销毁的 unique_ptr ,用于从函数中返回。

weak_ptr

指向 shared_ptr 所指对象但不改变其引用计数,不控制所指向对象的生命周期。

vector和list

区别

  1. list:双向链表
    • 链式存储
    • 顺序访问
  2. vector:可变大小数组
    • 连续存储
    • 随机访问

vector的动态增长:如果连续地址上没有空间容纳新元素,容器重新分配新的内存空间保存已有元素和新元素。将已有元素从旧位置移动到新空间,添加新元素。释放旧存储空间。

  • size()和 capacity() :size指已经保存的元素个数;capacity指在不重新分配内存的情况下,最多可以保存的元素个数 。
  • 一种分配策略是,每次需要分配新内存空间时将当前容量翻倍。
  • 实现目的:确保添加元素更高效。

c++三大特性

继承

  • 继承是一种机制,允许一个派生类继承另一个类基类的属性和方法。子类可以继承父类的成员变量和成员函数,并且可以重写父类的方法。继承实现了代码的重用性,子类可以继承父类的功能。

封装

  • 封装是将数据和操作数据的方法(函数)捆绑在一起的机制。
  • 封装提供了数据隐藏和安全性,防止外部直接访问对象的内部实现细节。

多态

  • 定义:多态是指同一个函数可以有不同的实现方式,即同样的方法可以在不同的对象上有不同的行为。
  • 作用:多态提供了接口的灵活性和可替代性。它允许基类的指针或引用指向派生类的对象,并且可以在运行时选择调用哪个类的方法,从而实现了动态绑定。

多态实现方法

  1. 函数重载
    • 函数名相同
    • 参数列表不同(重载判断依据)(参数类型、参数个数或参数顺序不同)
    • 返回类型可以相同也可以不同
  2. 模版
    • 函数模版:sort
    • 类模版:vector
  3. 虚函数:允许基类的指针或引用指向派生类的对象,并且可以在运行时选择调用哪个类的方法,从而实现了动态绑定。
    • virtualOverride

new 和 malloc

描述new / deletemalloc / free
本质属性运算符标准库函数
内存分配大小无须指定内存块大小显式指定内存大小
类型安全不是
关系new 封装了 malloc
分配失败时抛出 bac_alloc 异常返回NULL
其他特点分配释放内存+调用构造函数/析构函数只分配释放内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值