
C++
文章平均质量分 56
一些C++的基础知识
吃我一个平底锅
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
重写、重载、重定义
子类重新定义父类中有相同名称的**非虚函数 **( 参数列表和返回值都可以不同 ) ,指派生类的函数屏蔽了与其同名的基类函数。可以理解成发生在继承中的重载。原创 2025-02-25 09:59:08 · 217 阅读 · 0 评论 -
二叉搜索树、二叉平衡树(AVL)以及图解左旋与右旋(超易理解版)
二叉搜索树、二叉平衡树(AVL)以及图解左旋与右旋原创 2024-08-09 16:58:25 · 1576 阅读 · 0 评论 -
C++ ----remove与erase区别
vector中, remove函数和 erase函数都可以实现元素的删除,但它们的用法稍微有些区别:* erase是删除指定位置的元素或者指定区域内的所有元素* remove是删除和指定元素值相同的所有元素(remove需要和erase搭配使用才能实现完整的删除功能)原创 2024-08-08 14:39:21 · 1106 阅读 · 0 评论 -
C/C++:CV(const 与 volatile)属性的理解
C/C++提供多种声明变量和函数存储持续性、作用域和链接性的关键字,有些被称为存储说明符(store class specifier)或 cv 限定符(cv-qualifier), cv 限定符可出现于任何类型说明符(包括声明文法的 声明说明符序列)中,以指定被声明对象或被命名类型的常量性(constness)或易变性(volatility)。原创 2024-08-08 14:36:15 · 1748 阅读 · 0 评论 -
内存重叠以及memcpy和memmove函数详解
内存拷贝(memcpy函数)时或者在自己实现内存拷贝函数strcpy时,如果存在目标地址在原地址的范围内就造成了内存重叠。原创 2024-08-07 15:59:13 · 796 阅读 · 0 评论 -
initializer_list简介以及使用initializer_list实现print
利用initializer_list实现print。该类模板中主要有三个方法:begin()、end()迭代器以及获取区间中元素个数的方法size()。原创 2024-08-07 15:58:33 · 346 阅读 · 0 评论 -
使用Variadic Templates(可变参数模板)、decltype实现tuple
最近学习了C++2.0版本的一些新的特性,利用Variadic Templates(可变参数模板)实现tuple函数。原创 2024-08-06 14:01:59 · 498 阅读 · 0 评论 -
使用Variadic Templates(可变参数模板)实现max以及min
最近学习了C++2.0版本的一些新的特性,利用Variadic Templates(可变参数模板)实现支持多个参数的max函数。原创 2024-08-06 14:01:18 · 440 阅读 · 0 评论 -
使用Variadic Templates(可变参数模板)实现printf
最近学习了C++2.0版本的一些新的特性,利用Variadic Templates(可变参数模板)实现printf函数。原创 2024-08-05 16:24:14 · 462 阅读 · 0 评论 -
函数重载和模板的区别与联系
实际上是建立一个通用的函数,其函数的类型和形参的类型不具体指定,用一个虚拟的类型来代表,这个通用的函数就成为函数模板。定义函数名相同而形参列表(个数,类别)不同的多个函数,这些函数被称为重载函数,重载函数通常执行的操作非常类似,如打印不同的输入对象。函数模板则用于为实现逻辑一样只是参数类型不同的一类函数提供统一的模板,提高函数编写的效率;但函数模板只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模板,这就是函数模板相对于函数重载的缺陷。函数模板也可以进行重载。原创 2024-06-05 15:14:09 · 392 阅读 · 0 评论 -
详解C和C++的区别
在学习C++和C语言的过程中,总会分不清两者的区别。在此,做一个总结梳理。原创 2024-06-05 15:03:07 · 1160 阅读 · 0 评论 -
智能指针交叉引用问题怎么解决?
也就是将类A和类B中的shared_ptr强智能指针都换成weak_ptr弱智能指针,当通过weak_ptr访问对象成员时,需要先调用weak_ptr的lock提升方法,把weak_ptr提升成shared_ptr强智能指针,再进行对象成员调用,如果提升以后引用计数不为0,说明对象没有被析构,可以提升成功,访问对象成员。weak_ptr弱智能指针,虽然有引用计数,但实际上它并不增加计数,只是起到观察对象的作用,weak_ptr的引用计数指的是有多少个weak_ptr在观察同一个shared_ptr。原创 2024-06-04 13:52:36 · 390 阅读 · 0 评论 -
make_shared与shared_ptr
在 C++11 中,提供了 make_shared 函数来创建共享指针,它的底层是一个模板函数,可以接受任何类型的参数,并返回一个指向该类型对象的共享指针。原创 2024-06-04 13:46:39 · 653 阅读 · 0 评论 -
堆和栈的区别?
对于堆,系统有一个记录空闲内存地址的链表,当系统收到程序申请时,遍历该链表,寻找第一个空间大于申请空间的堆结点,删除空闲结点链表中的该结点,并将该结点空间分配给程序(大多数系统会在这块内存空间首地址记录本次分配的大小,这样delete才能正确释放本内存 空间,另外系统会将多余的部分重新放入空闲链表中)。系统使用链表来存储空闲内存地址,所以堆是不连续的内存区域,堆大小受限于计算机系统中有效的虚拟内存(32bit 系统理论上是4G),所以堆的空间比较灵活,比较大。生长方向:堆向上,向高地址方向增长。原创 2024-06-03 23:22:27 · 401 阅读 · 0 评论 -
构造函数和析构函数可不可以是虚函致?
例如虚析构函数,这是我们在编程过程中经常使用的方法,当定义一个基类指针Base *p=new Derive()时;基类指针指向派生类对象的时候,在delete p的时候,只析构了基类的,派生类的无法析构,就需要把基类的析构函数实现成虚析构函数,在调用析构函数的时候就会进行动态绑定,访问p指向的对象,是Derive类型,访问它的虚函数表,派生类和基类的析构函数就都可以调用到;原创 2024-06-03 23:15:54 · 472 阅读 · 0 评论 -
C++访问越界
常见场景访问数组元素越界vector容器访问等 vector<int>;vec<2>;字符串访问越界string str;str[2];array数组访问越界字符串处理,没有添加’\0’字符,导致访问字符串的时候越界了;使用类型强转,让一个大类型(派生类)的指针指向一块小内存(基类对象)了,然后指针解引用,访问的内存就越界了!总之本质就是访问超过了系统分配的内存!原创 2024-06-02 23:20:25 · 791 阅读 · 1 评论 -
C++ 智能指针
在剖析源码的过程以及我们使用C++进行编程的过程中,我们经常会看到智能指针的身影。那么为什么要使用智能指针呢?其实,使用智能指针最重要的原因就是防止内存泄漏,它可以帮助我们管理动态分配的内存的,然后自动释放new出来的内存空间。原创 2024-06-02 23:17:53 · 772 阅读 · 0 评论 -
C++的继承
继承(inheritance)机制是面向对象程序设计中使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生的新类,称派生类(或子类),被继承的类称基类(或父类)。继承属于类和类之间的关系,类与类的关系除了继承(a kind of)还有组合(a part of);原创 2024-05-31 11:43:56 · 379 阅读 · 0 评论 -
C++的new和delete,什么时候用new[]申请,可以用delete释放?
如果是自定义类型,而且提供了析构函数,那么用new来开辟内存就在系统底层就会开辟相应的内存存放对象,并且会开辟4个字节的内存,去存放相应的对象个数,以便析构的时候系统可以一一进行析构,在析构的过程中,系统会自动析构掉这四个字节,并通过指针偏移来析构相应数量的对象,这时候一定需要delete[]来析构,否则内存不知道是数组形式,只会从相应对象的内存进行析构;而delete操作会有两步,调用对象的析构函数,并且释放内存;其余情况理论上可以混用,但是不建议混用;原创 2024-05-31 11:35:49 · 284 阅读 · 0 评论 -
C++单例模式
一个类不管创建多少次对象,永远只能得到该类型一个对象的实例。原创 2024-05-30 07:50:11 · 167 阅读 · 0 评论