![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 74
HIT_KyleChen
行胜于言
展开
-
C++中的static关键字大揭秘
静态全局变量特性1. 存放空间:存放在全局数据区 从声明时开始初始化main函数结束销毁2. 初始化:如果没有初始化则会被默认初始化为03. 作用域:作用域为整个源文件,4. 区别:和全局变量的区别是 静态全局只在声明它的整个文件有效5. 而在文件之外是不可见的 而全局变量是文件之间共享的例子#include<iostream>using namespace s...原创 2020-03-22 13:53:50 · 193 阅读 · 0 评论 -
This指针大揭秘
原理this指针是什么?1.this指针是类的指针,指向对象的首地址。2.成员函数默认会隐式的包含this指针形参3.在成员函数中所有对成员变量的调用都会默认转换成用this指针对成员变量的调用4.this指针只能在成员函数中使用,在全局函数、静态成员函数中都不能用this。5.在成员函数中调用delete this会出现什么问题?当调用delete this时,类对象的内...原创 2020-03-22 11:32:28 · 234 阅读 · 0 评论 -
高并发内存池的实现
第一层:Thread Cache(线程缓存)1.thread cache是内存池中的第一层缓存,这一层缓存主要解决的问题就是并发状态下锁竞争的效率问题。线程在这里申请不需要加锁,每一个线程都有自己独立的cache,这也就是这个项目并发高效的地方。怎么实现每个线程都拥有自己唯一的线程缓存呢?为了避免加锁带来的效率,在Thread Cache中使用(tls)thread local st...原创 2020-02-18 15:14:26 · 783 阅读 · 0 评论 -
C++内功修炼----面向对象的多态
0.概述多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。实现多态,有二种方式,覆盖,重载。覆盖:是指子类重新定义父类的虚函数的做法。重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数...原创 2019-05-30 10:43:48 · 383 阅读 · 0 评论 -
C++内功修炼----基础知识的零碎整理
c和c++的区别?第一点就应该想到C是面向过程的语言,而C++是面向对象的语言,一般简历上第一条都是熟悉C/C++基本语法,了解C++面向对象思想,那么,请问什么是面向对象? C和C++动态管理内存的方法不一样,C是使用malloc/free函数,而C++除此之外还有new/delete关键字;(关于malooc/free与new/delete的不同又可以说一大堆,最后的扩展_1部分列出十大...原创 2019-05-27 20:43:16 · 490 阅读 · 0 评论 -
C++内功修炼----面向对象之封装
0.概述1.类的成员变量可变成员变量mutable在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量(mutable只能由于修饰类的非静态数据成员),将永远处于可变的状态,即使在一个const函数中。我们知道,假如类的成员函数不会改变对象的状态,那么这个成员函数一般会声明为const。但是,有些时候,我们需要在const的函...原创 2019-05-29 08:06:19 · 358 阅读 · 0 评论 -
C++内功修炼----预处理 volatile
1.预处理1.1define宏定义和函数有何区别?宏在编译时完成替换,之后被替换的文本参与编译,相当于直接插入了代码,运行时不存在函数调用,执行起来更快;函数调用在运行时需要跳转到具体调用函数。宏函数属于在结构中插入代码,没有返回值;函数调用具有返回值。宏函数参数没有类型,不进行类型检查;函数参数具有类型,需要检查类型。宏函数不要在最后加分号。宏定义和const...原创 2019-05-29 12:25:07 · 244 阅读 · 0 评论 -
C++内功修炼----表达式
sizeof运算符sizeof与strlen的区别函 参 组 节1)strlen计算字符串的具体长度(只能是字符串),不包括字符串结束符。返回的是字符个数。2)sizeof计算声明后所占的内存数(字节大小),不是实际长度。3)sizeof是一个取字节运算符,而strlen是个函数。4)sizeof的返回值=字符个数*字符所占的字节数,字符实际长度小于定义的长度,此时字符个数就等于定...原创 2019-05-29 12:28:35 · 249 阅读 · 0 评论 -
C++内功修炼----函数
Table of Contents1.参数传递2.函数重载其他特性内联函数constexpr函数static静态函数1.参数传递介绍值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,...原创 2019-05-29 12:51:50 · 251 阅读 · 0 评论 -
C++内功修炼----面向对象概述
面向对象三大特性? 封装性:数据和代码捆绑在一起,避免外界干扰和不确定性访问。 继承性:让某种类型对象获得另一个类型对象的属性和方法。 多态性:同一事物表现出不同事物的能力,即向不同对象发送同一消息,不同的对象在接收时会产生不同的行为(重载实现编译时多态,虚函数实现运行时多态)。 面向对象的三个基本特征是:封装、继承、多态。封装封装最好理解了。封装是面向...转载 2019-05-29 13:52:44 · 200 阅读 · 0 评论 -
C++内功修炼----面向对象之继承
Table of Contents继承的基本概念继承的基本语法 继承的分类派生类的构造函数派生类的析构函数继承的赋值兼容规则继承 中的友元继承中的静态成员继承中的虚函数 继承的基本概念继承就是新类从已有类那里得到已有的特性。 类的派生指的是从已有类产生新类的过程。原有的类成为基类或父类,产生的新类称为派生类...原创 2019-05-29 21:09:38 · 462 阅读 · 0 评论 -
智能指针的前世今生(一)------四张图讲明白程序的内存结构
欢迎交流 QQ 2431173627 微信 ccc17862701790关于本系列的一个总结今天先说说第一部分 程序的内存结构介绍关于程序的内存结构 其实用一张图就可以说明清楚结构详细的讲讲各个部分分别有什么 也是用一张图来说明清楚例子关键点堆和栈有什么不同...原创 2019-09-08 15:18:37 · 291 阅读 · 0 评论 -
智能指针的前世今生(二)------new delete完全解析
欢迎交流 QQ 2431173627 微信 ccc17862701790在这一系列的第一篇文章中讲了 程序的内存结构在堆区的内存是要通过new delete系列函数来分配释放的那么在new delete的背后 程序到底做了什么?又有哪些注意点?本文将一一解密new operator1. 这个就是我们平常用到的new ,是一种操作符 关键字 不是一种函数2.内...原创 2019-09-08 15:33:52 · 384 阅读 · 0 评论 -
智能指针的前世今生(三)------神兵利器shared_ptr unique_ptr weak_ptr
欢迎交流 QQ 2431173627 微信 ccc17862701790本系列的上一篇文章讲了手动方式的内存管理 new delete这种方式往往存在很多问题 这一节将讲通过智能指针来自动管理动态内存智能指针的引入智能指针的引入有以下几大原因1.在动态内存管理中,如果new上一块空间,但是没有delete,就会产生内存泄露的问题。2.但是有时候,我们new了,也de...原创 2019-09-08 15:47:12 · 331 阅读 · 0 评论 -
C++内功修炼系列------动态内存管理
1.内存布局1.0.概述一个可执行程序文件需要在计算机硬件上运行起来,其实质就是静态的文件被加载到内存中的过程,可执行程序文件只是一个程序的载体。那么执行一个应用后,它在内存中是一个怎样的结构呢?一个程序被加载到内存中,这块内存首先就存在两种属性:静态分配内存和动态分配内存。静态分配内存:是在程序编译和链接时就确定好的内存。动态分配内存:是在程序加载、调入、执行的时...原创 2019-05-17 20:37:42 · 762 阅读 · 1 评论 -
C++内功修炼----变量
1.extern2.const3.static其他问题定义和声明的区别static的作用静态变量什么时候初始化1.extern1)extern修饰变量的声明如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。2)extern修饰函数的声明如果文件a.c需要引用b.c中的函数,比如在b....原创 2019-05-27 10:10:25 · 241 阅读 · 0 评论 -
一篇文章搞懂STL中的迭代器Iterator
Table of Contents0.概述迭代器是一种智能指针迭代器是一种连接容器和算法的桥梁1.迭代器的分类Input(输入)迭代器Output(输出)迭代器Forward(前向)迭代器Bidirectional(双向)迭代器Random Access(随机存取)迭代器迭代器相关算法函数各个容器支持的迭代器2.迭代器的失效...原创 2019-03-21 09:08:24 · 1978 阅读 · 0 评论 -
一文搞懂C++标准IO库
介绍分类 普通流文件流 介绍 注意点String流 介绍首先看一下IO库,标准函数库,STL这些概念之间都是怎么样一个关系介绍什么是IO库?IO库就是有一些标准IO类组成的类库通过这些IO类可以实现对可实现对设备(控制台,文件等)的IO操作,对内存的IO(即String类)操作其中对控制台的IO操作一般通过io...原创 2019-03-17 21:21:36 · 445 阅读 · 0 评论 -
一篇文章彻底搞懂红黑树(多图,看完包懂)
Table of Contents1.定义2.性质3.基本操作4.功能4.1查找4.2 插入4.3 删除5.红黑树的部分实现6.应用--map/multimap0.概述2.用法7.应用--set/multiset1.概述2.用法8.问题&总结0.概述如上图整理所示 红黑树是一种平衡的二叉树,引入它为了解决的...原创 2019-03-24 18:09:14 · 4973 阅读 · 4 评论 -
一篇文章搞懂STL中的顺序容器之Vector
Table of Contents0.概述1.迭代器(成员变量)2.数据结构(成员变量)3.内存管理(成员函数)内存扩容构造函数push_back()函数pop_back函数insert函数erase函数clear函数析构函数4.使用方法5.相关问题6.参考0.概述vector动态数组, 顾名思义,空间可以动态变化...原创 2019-03-21 15:34:11 · 1869 阅读 · 1 评论 -
一篇文章彻底搞懂哈希表
Table of Contents1.原理讲解1.1散列表的概述1.2散列表的优缺点1.3散列表的关键问题之散列函数的构建1.4散列表的关键问题之散列冲突的处理1.5散列表的性能分析2.源码实现2.1 节点定义2.2 迭代器2.3 数据结构3.内存管理3.1空间配置器3.2 构造函数3.3插入函数insert3.4元素地...原创 2019-03-25 11:25:34 · 1792 阅读 · 0 评论 -
一篇文章搞懂STL中的空间配置器allocator(原创,多图,易懂)
Table of Contents0.引入1.标准的空间配置器allocator2.更为高效的空间配置器alloc2.1----对象的构造与析构2.1.1 对象的构造:::construct();2.1.2对象的析构:::destroy();2.2----内存的配置与释放2.2.0 概述2.2.1一级配置器:__malloc_alloc_template2...原创 2019-03-18 19:21:04 · 3311 阅读 · 2 评论 -
一篇文章搞懂STL中的顺序容器之list
0.概述1.结点2.迭代器3.数据结构4.内存管理4.1内存分配与释放空间配置器list_node_allocator开辟一个节点空间get_node()释放一个结点空间put_node()开辟一个结点空间并构造create_node()释放一个结点空间并析构destory_node() 4.2内存使用构造函数list()pus...原创 2019-03-23 14:52:38 · 566 阅读 · 0 评论 -
一篇文章搞懂STL中的顺序容器之deque
0.概述1.中控器与迭代器原理讲解源码实现2.内存管理3.使用4.参考0.概述什么是deque呢?一句话来概括,deque是一种 双向开口的"连续"线性空间存储数据的数据结构(注意这里的连续打了双引号,后面会解释)咱们来对比一下deque和vector的一些区别优点:1.vector是单向开口 deque是双向开口.也就是说vector只能...原创 2019-03-23 22:03:20 · 711 阅读 · 1 评论 -
C++内功修炼----类型
Table of Contents0.概述1.基本类型1.1 引用1.1.1 引用的原理1.1.2引用的注意点 1.1.3 引用的分类1.2指针 1.2.1指针的原理 1.2.2指针与引用 1.2.3指针与数组 1.2.4指针与函数 1.2.5野指针...原创 2019-05-26 10:30:44 · 394 阅读 · 0 评论 -
C++学习笔记——bug问题记录&&使用心得
1.error C2951: 模板 声明只能在全局、命名空间或类范围内使用解决办法:可能是类模板的成员函数在定义时 由于缩进等原因使得一个函数不小心写到了另一个函数的大括号内2. 一个小毛病:写for的时候要用分号 ,里面的变量事先定义。3.关于解决程序运行后一闪而过,不方便看运行的结果的解决办法 https://blog.csdn.net/lian...原创 2018-10-13 23:40:30 · 4712 阅读 · 0 评论