C++
文章平均质量分 62
Moti_31
Better late Than Never
展开
-
智能指针——实现shared_ptr
前面介绍的auto_ptr和unique_ptr都存在着些许的缺陷,显得不是那么的“智能”,下面我们来看一下较为智能的shared_ptr的设计思路(一块空间、计数器、锁):与前两者不同的是shared_ptr用一个count的引用计数将指向同一份内存空间的指针,用_count来表示,这样在析构的时候,会判断_count是否为0,再决定是否示释放空间:但是并不仅仅是一个_count就能解...原创 2019-07-18 18:30:00 · 271 阅读 · 0 评论 -
C++11初始thread库
在C++中,支持了多线程,下面就来学习一下C++中的线程库thread:先来看下面的代码:#include <thread>#include <atomic>#include <mutex>using namespace std;unsigned long sum;void fun(size_t num){ for (size_t ...原创 2019-08-06 15:06:14 · 477 阅读 · 0 评论 -
继承/虚拟继承/虚表
继承的分类:1.单继承 创建一个Student的对象,看一下他的内存分布是怎样的: 2.多继承对虚函数进行重写的多继承:3.多重继承4.菱形继承虚拟继承在虚拟继承中,我们可以看到,子类成员和基类成员的存储顺序发生了改变,并且在b对象的前四个字节中存放了一些东西,是我们呢不曾了解的:,下面就来研究一下...原创 2019-08-06 12:02:23 · 349 阅读 · 0 评论 -
C++11之emplace_back
在之前的学习中,了解到在STL中,进行插入元素的时候,有insert和push两种选择方式,而在有了右值引用和移动语义的时候,就提出了更高效的插入方法:emplace_back,下面来介绍一下C++11新特性中的emplace_back是怎样的:先来看一下代码来分析:#include <vector>#include <string>#includ...原创 2019-08-04 10:33:35 · 21581 阅读 · 0 评论 -
初识右值引用、移动语句(std::move)、完美转发(std::forward)
左值:可以取地址的、有名字的就是左值右值分为纯右值(C++98中提出)和将亡值(C++11提出)纯右值:用于识别临时变量和一些不跟对象关联的值。比如:常量、一些运算表达式(1+3)等,不能取地址的值 将亡值:在确保其他变量不再被使用、或即将被销毁时,通过“盗取”的方式可以避免内存空间的释放和分配,能够延长变量值的生命期。引用:右值引用:就是对一个右值进行引用的类型,事实上,由于右...原创 2019-07-24 15:52:31 · 308 阅读 · 0 评论 -
C++动态内存管理
在学习C++之前,我们了解到C语言实现动态开启内存空间有malloc,realloc,calloc三种方式。都是在堆上开辟。C语言动态开辟空间的方式::malloc指开辟size大小的空间:realloc指将ptr的空间重新开辟为size大小的空间:calloc指分配num个size大小的空间以上三种开辟空间成功返回首地址,失败返回NULL。C++动态开辟空间方式:在...原创 2018-12-08 13:35:12 · 638 阅读 · 0 评论 -
C++--类的继承
在C++中,类的三大特性:封装、继承、多态。以下,就来总结一下类的特性之一-----继承。首先,要了解什么是继承:是使代码可以复用的最重要的手段,在保持原有类特性的基础上进行扩展,增加一些新的功能(成员函数、成员变量),构成新的类,称之为子类(派生类),原来的类称之为父类(基类)。继承后父类的成员(成员变量、成员函数)变成了子类的一部分。在类的继承中也有三种权限:public(共有),...原创 2019-02-28 18:06:47 · 515 阅读 · 0 评论 -
智能指针 auto_ptr、unique_ptr,shared_ptr
用户申请堆上的空间,会用一个指针指向将其保存起来,以便于对其进行释放,但往往释放的情况有多种,所以有时会忘记释放,有可能会造成内存泄漏。智能指针的提出是为了解决此类问题,将其被封装在一个类中,在构造的时候创建,在析构的时候释放。因为智能指针都是栈空间上类的对象。所以,当函数(程序)运行结束后,会自动调用其析构函数自动释放。 ...原创 2019-04-06 14:55:27 · 795 阅读 · 0 评论 -
STL---空间配置器
空间配置器是STL六大组件之一,它的作用就是为STL中的容器提供高效的管理空间,虽然我们平时没有使用过,但是其存在于每个容器上。因为STL所操作的对象(数值,键值对)都存放在容器当中,当增加新的对象(数值,键值对)时,都是通过new申请的,但有很多不足,1.频繁的向内存申请小块的内存块,容易造成内存碎片,并且影响运行效率2.直接使用malloc和new申请一段连续空间,都会有额外...原创 2019-04-28 21:14:29 · 724 阅读 · 0 评论 -
多态(实现)--虚函数
多态是一种事物的多种变现形态,不同的对象去完成一件事时会产生不一样的状态。 实现静态多态的方法之一函数重载指的是在同一个作用域内两个函数的名字相同,但是参数列表必须不同,就构成了函数重载。如下图: 而动态多态必须对函数进行重写(虚函数),并且调用函数的对象必须是指针或引用。什么是虚函数呢?在publ...原创 2019-06-12 11:26:21 · 500 阅读 · 0 评论 -
内存分配管理
系统中的内存分为栈、堆、全局区、代码区栈:由编译器自动分配释放,参访函数的参数值,局部变量,函数栈帧,函数调用过程。 堆:由程序员自行分配想要的空间大小,C中的malloc等函数,C++中的new 全局区(数据区):存放的是全局变量和静态变量,初始化的存在一起,未初始化的放一起,程序结束后由系统释放 代码区:存放函数体的二进制代码。int tmp1 = 0; //初始化的全局变量(全...原创 2019-06-29 12:37:10 · 356 阅读 · 0 评论 -
STL基础
STL(标准模板库):是C++标准库的重要组成部分。借用STL源码剖析这本书中的一句话:为了建立数据结构和算法的一套标准,并且降低其间的耦合关系以提升各自的独立性、弹性、交互操作性,C++诞生了STL。由此可见STL相对于C++来说是相当的重要了。STL由六大组件构成:容器:各种的数据结构,用来存放数据;分为关联式容器(map、set)和非关联式容器(string、vector、...原创 2019-06-30 20:57:43 · 208 阅读 · 0 评论 -
智能指针——实现auto_ptr
之前也了解过一些智能指针的相关知识,其目的是为了解决释放用户动态开辟的空间,方便管理,下面就来看一下最早提出的C++98中的auto_ptr:auto_ptr的实现就是资源管理权的转移。当然,这其中还存在着很多的问题,相当于底层空间的一份资源,只有一个指针能够指向,这并不符合我们平常使用的习惯,相当于拷贝、赋值没有完全的实现。(别人借你用,你直接不还了),当然是行不通的。template...原创 2019-07-18 08:27:13 · 277 阅读 · 0 评论 -
智能指针——实现unique_ptr
之前介绍了auto_ptr实现,但其并不完美,当然也不“智能”,鉴于之前的auto_ptr实现了简单的资源管理权的转移,下面来看一下另一种思想的unique_ptr。在unique_ptr中为了避免繁琐的拷贝、赋值出现的问题,unique_ptr更像是一个油盐不进的老顽固,别人怎么说,他也不听,直接让别人拿不到自己的东西:C++98中是,将拷贝、赋值定义为private属性;C++11中直接将...原创 2019-07-18 09:05:50 · 435 阅读 · 0 评论 -
VS实现文件的快速搜索
在VS2013下模拟实现了类似Everything的文件快速搜索功能,支持模糊匹配,高亮显示搜索部分。1、首先在linux下有find命令,找一个文件是非常快的。2、在windows下,查找是比较慢的,可以说是很慢的了,所以就想自己实现一个3、使用everything搜索,效率很明显快乐很多使用windows下的搜索是非常慢的,并且不支持拼音搜索和拼音首字母搜索。所以自己实...原创 2019-08-11 16:14:30 · 5914 阅读 · 0 评论