
C++
文章平均质量分 74
Jqivin
这个作者很懒,什么都没留下…
展开
-
NSIS脚本
nsi语法原创 2023-02-17 20:13:00 · 1100 阅读 · 0 评论 -
C++ ——虚继承时的构造函数
在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。下面我们以菱形继承为例来演示构造函数的调用:#include <iostream>using namespace std;//虚基类Aclass A{public: A(int a);protected: int .原创 2021-06-28 15:54:07 · 739 阅读 · 0 评论 -
C++ 继承和多态
文章目录 1、继承的本质和原理、虚函数的原理2、多态与纯虚函数3、理解虚基类、虚继承、菱形继承4、c++语言级别提供的四种类型转换方式 1.继承的本质和原理 2.派生类的构造过程 3.重载、覆盖、隐藏 4.静态绑定和动态绑定 5.多态 vfptr...转载 2021-06-28 15:28:14 · 88 阅读 · 0 评论 -
std::alloc 二级配置器
文章目录一、关于二级配置器的介绍二、结构三、主要接口和函数的介绍1.allocate 空间配置函数2. deallocate 空间释放函数3.reallocate 重新分配函数4.refill函数5.chunk_alloc函数SGI空间配置器 jqw_alloc.h的代码一、关于二级配置器的介绍SGI第二级配置器的做法是,如果区块够大,超过128 bytes时,就移交第一级配置器处理。当区块小于128 bytes 时,则以内存池 ( memory pool)管理,每次配置一大块内存,并维护对应之自由.原创 2021-06-16 15:44:12 · 1028 阅读 · 0 评论 -
SGI STL 空间配置器
文章目录一、空间配置器一、空间配置器当我们使用stl标准容器的时候,我们就在用空间配置器。空间配置器总是隐藏在背后,默默的付出。但我们却没有感受的到,其实,在vector,list等标准容器在实现的时候,就指定了默认的空间配置器。...原创 2021-06-15 21:48:54 · 963 阅读 · 0 评论 -
linux下CMake的简单介绍
文章目录一、CMake简介二、CMake的安装三、CMake的语法特性的介绍基本语法格式CMake常用的指令和变量1. 常用的指令2.常用的变量四、CMake编译工程1.目录结构2. 编译流程3. 两种构建方式一、CMake简介 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件。特点:使用简单方便,可以跨平台使用,构建项目编译环境。比直接写Makefile文件简单,可以通过简单的CMake生成复杂.原创 2021-06-11 21:11:43 · 1936 阅读 · 1 评论 -
C++11- lambda表达式
文章目录一、lambda表达式的概念二、使用`1.使用形式``2.参数介绍``3.例子`三、使用实例1. 关于作用域2. C++11允许省略返回值类型和参数列表3. 捕获列表的使用1. [=]和[&]2.[this],[bar],[=,&bar]3.lambda表达式的延迟调用4.mutable的使用(易变的)5.lambda表达式和函数指针4.打印数组中偶数的个数1. 利用仿函数2.利用lambda表达式3.有关for_each一、lambda表达式的概念lambda表达式来源于函.原创 2021-06-10 21:32:25 · 254 阅读 · 0 评论 -
C++11实现半同步半异步的线程池
文章目录一、线程池的简单介绍二、半同步半异步线程池1.基本结构2.工作原理三、结构实现1.同步队列一、线程池的简单介绍 目的:减少线程创建和销毁的时候的系统资源的开销。减少线程上下文切换的开销。引入的目的在处理大量的并发任务的时候,如果按照传统的方式,一个任务开辟一个线程来进行处理,大量的线程创建和销毁将消耗过多的系统资源,而且增加了上下文切换的时间,所以通过引用线程池的概念来解决这些问题。工作的原理线程池技术通过在系统中预先创建一定数量的线程,当任务请求到来的时候,从线程池中分配一个预先创.原创 2021-06-06 17:52:41 · 451 阅读 · 4 评论 -
C++11 std::bind函数,std::function函数
文章目录一、std::bind函数的简单介绍二、使用一、std::bind函数的简单介绍std::bind函数定义在头文件functional中,是一个函数模板,它就像一个函数适配器,接受一个可调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表。std::bind将可调用对象与其参数一起进行绑定,绑定后的结果可以使用std::function保存. std::bind主要有以下两个作用:将可调用对象和其参数绑定成一个仿函数;只绑定部分参数,减少可调用对原创 2021-06-04 19:08:29 · 1316 阅读 · 0 评论 -
利用条件变量和互斥量循环打印ABC和1-100的错误情况
、文章目录循环打印ABC的错误情况循环打印ABC的错误情况#include<iostream>#include<mutex>#include<condition_variable>#include<queue>using namespace std;std::mutex mtx;std::condition_variable cv;int flg = 0;void Print_A(){ for (int i = 0; i <原创 2021-05-31 22:07:23 · 188 阅读 · 0 评论 -
设计模式--观察者模式
文章目录一、观察者模式简单介绍总结一、观察者模式简单介绍总结提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。...原创 2021-05-29 21:33:15 · 180 阅读 · 0 评论 -
设计模式--单例模式
文章目录单例模式简单介绍单例模式动机单例模式简单介绍单例模式动机有的时候,对于一个系统来说,我们无须创建多个实例。比如任务管理器,回收站。就拿任务管理器来说,我们只需要一个就可以了。如果创建两个不仅会占用内存,如果两个窗口内容不一致还会给用户造成误解。为了节约系统资源,有时需要确保系统中某个类只有唯一一个实例,当这个唯一实例创建成功之后,我们无法再创建一个同类型的其他对象,所有的操作都只能基于这个唯一实例。只包含一个单例角色:在单例类的内部实现只生成一个实例,同时它提供一个静态的getIn.原创 2021-05-28 22:12:53 · 162 阅读 · 0 评论 -
设计模式--抽象工厂模式
文章目录原创 2021-05-28 21:55:05 · 138 阅读 · 0 评论 -
设计模式--工厂模式
文章目录工厂模式简单介绍总结1.优点2.缺点工厂模式简单介绍简单工厂模式如果新增加产品要修改工厂类代码,所以不符合开闭原则。如何实现增加新产品而不影响已有代码? – 使用工厂模式。工厂模式为了解决简单工厂模式的缺点,为了实现开闭原则,工厂模式不是定义一个统一的工厂类来创建所有的产品。而是定义不同的工厂类来创建不同的产品。定义:工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式原创 2021-05-28 21:54:38 · 167 阅读 · 0 评论 -
设计模式--简单工厂模式
文章目录简单工厂模式介绍总结1. 优点2. 缺点3.适合场景异常的处理简单工厂模式介绍简单工厂模式并不属于GoF 23个经典设计模式。它的设计思想很简单。首先,我们定义不同的具体产品类来封装不同类型的对象的相关代码。然后将这些具体产品类中的共同部分提取后封装到一个抽象产品类中。每一个具体产品类都是抽象产品类的子类。然后我们定义一个工厂类,里面封装一个创建不同产品的工厂方法(静态方法),使客户端可以传入工厂类不同的参数来创建不同的产品。客户端想要创建 产品只需要给工厂类的静态方法提供相应的参数就可.原创 2021-05-28 21:52:53 · 158 阅读 · 0 评论 -
C++static关键字
文章目录C/C++中static的共有用法C++中static的独有用法C/C++中static的共有用法1. 静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数。如果是全局变量的话,变量就不属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。静态局部变量的特点(1)该变量在全局数据区分配内存(局部变量在栈区分配内存);(2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化(局部变量每次函数调用都会被初始化);(3)静态局部变量一般.转载 2021-05-28 21:51:52 · 82 阅读 · 0 评论 -
C++为什么不能在类中定义该类的对象
文章目录一、C++可以在类中定义该类的对象吗?二、为什么可以定义静态对象?一、C++可以在类中定义该类的对象吗?不能,但是可以定义静态对象、该对象的指针或者引用。原因:我们创建这个对象,但是这个对象中又有一个对象,比如class A{A a};创建一个对象A a1,a1里面又有对象a,这个对象里面还有一个对象。这样一直创建下去,直到内存耗尽,出现栈溢出。二、为什么可以定义静态对象?因为静态的成员不在对象的内部,在data区,被这个类共享。所以不会出现递归创建。也可以定义指针和引用,.原创 2021-05-27 20:43:25 · 1970 阅读 · 0 评论 -
C++ shared_ptr&&weak_ptr的简单介绍和仿写
文章目录shared_ptr一、shared_ptr的简单介绍二、shared_ptr的使用1.函数介绍2.使用三、shared_ptr对象创建方法的讨论1. 有两种常见的创建的方法:2. 有关make_shared函数weak_ptr一、weak_ptr的简单介绍二、weak_ptr的使用1.成员函数介绍2. 使用关于shared_ptr造成的循环引用以及解决1.循环引用2.解决方案shared_ptr和weak_ptr的仿写1. 代码展示:2. 使用总结shared_ptr一、shared_pt.原创 2021-05-23 21:41:01 · 491 阅读 · 0 评论 -
C++ unique_ptr介绍及仿写
文章目录一、unique_ptr的使用二、unique_ptr类的成员方法二、仿写总结一、unique_ptr的使用(1)构造函数不能进行隐式转换(2)unique_ptr可以指向动态数组。因为unique_ptr有unique_ptr<T[]>重载版本,销毁动态对象时调用delete[]。(3)unique_ptr无拷贝语义,但提供了移动语义,所以可作为函数返回值。(4)谨慎使用智能指针的get与release方法当使用get方法返回裸指针时,智能指针并没有释放指向对象的所有权.原创 2021-05-22 16:46:06 · 799 阅读 · 0 评论 -
C++ 动态内存 new/delete用法
文章目录一、动态内存是什么?二、何时使用动态内存一个小例子一、动态内存是什么?动态内存是在堆区空间的内存。是指在程序运行过程中动态分配的内存。这些内存如果程序员不自己释放,操作系统不会帮你释放。通过new申请,delete释放。栈内存:保存定义在函数内部的的非静态对象(或变量),函数作用域结束函数栈帧销毁,这个函数所使用的栈内存就被释放,由操作系统管理。静态内存:使用之前分配,程序结束销毁。二、何时使用动态内存1.程序不知道自己使用多少对象2.程序不知道所需对象的准确类型3.程序需要在多.原创 2021-05-22 14:40:22 · 364 阅读 · 0 评论 -
智能指针 、auto_ptr
一、裸指针(及其麻烦,用智能指针)因为裸指针存在很多问题,主要是下面这些:1.难以区分指向的是单个对象还是一个数组;⒉.使用完指针之后无法判断是否应该销毁指针,因为无法判断指针是否"拥有”指向的对象;3.在已经确定需要销毁指针的情况下,也无法确定是用delete关键字删除,还是有其他特殊的销毁机制,例如通过将指针传入某个特定的销毁函数来销毁指针;4.即便已经确定了销毁指针的方法,由于1的原因,仍然无法确定到底是用delete(销毁单个对象)还是delete](销毁一个数组);5.假设上述的问题都原创 2021-03-09 17:55:12 · 154 阅读 · 0 评论 -
C++模板
模板原创 2021-03-08 17:07:25 · 96 阅读 · 0 评论 -
动态联编和静态联编
动态联编和静态联编一、静态联编定义在编译时所进行的这种联编又称静态束定,在编译时就解决了程序中的操作调用与执行该操作代码间的关系。注意:静态联编由可访问属性和默认值确定二、动态联编定义编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序运行时才能确定将要调用的函数,为此要确切知道该调用的函数,要求联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联编。动态联编又称动态关联。组成(1)成员函数必须声明为virtual(2)如果基类中声明了为虚函数,则派生类中不原创 2021-03-08 16:01:06 · 421 阅读 · 0 评论