自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 新手入门git命令

Git是目前世界上最先进的分布式版本控制系统。我们每一台电脑都可以做代码仓库,我们对当期代码做的任何更改都会存放到我们的Git记录中。当我们写完了手中的代码,我们就可以上传到中间服务器,其他人可以拿到我们的代码,做出更改,使协同开发非常方便。

2020-06-29 23:33:41 128 1

原创 新手入门gdb调试

在使用gcc编译时,需要在命令的最后加上-g这个参数,就表示生成的程序可以利用gdb调试。使用gdb app来启动目标程序,app可换成目标程序名。直接输入l或者l加行号或者l加函数名。使用的b加行号,函数名等。(4)设置断点无效/生效。(2)查看非当前文件。(2)打印变量的类型。

2020-06-29 21:24:21 285

原创 新手入门makefile教程

我们在linux下进行编程时,通常使用的是gcc编译器,这种情况下我们通常要去手写编译命令,如:gcc a.c b.c -o app。makefile是以一个个规则组成的,以 gcc a.c b.c -o app为例,将其写成规则,分为三个部分:目标、依赖和命令。只修改一个源文件如a.c,则make只执行gcc a.c和gcc a.o b.o -o app两条命令,不再执行gcc b.c。:区别于=,PD的值为c而不是_c,当然PC最终值为_c,可以理解为C语言中的’=’上述写法的缺点是不能自动清理项目。

2020-06-29 18:11:12 1843 1

原创 基于hiredis的发布-订阅模式实现

概述发布-订阅模式,又称观察者模式。在本文的实现中,观察者Service订阅感兴趣的通道,而redis客户端则向通道中发布消息,当订阅的通道有消息到来时,循环等待的线程就会给Service发出通知,并调用处理函数进行消息的处理(输出)。代码实现基于hiredis的发布和订阅代码下面只给出了代码的头文件,具体实现见github仓库。#ifndef REDIS_H#define REDIS_H#include <hiredis/hiredis.h>#include <thre

2020-06-27 20:40:21 1795 1

原创 观察者模式原理与C++实现

定义观察者模式又叫发布-订阅模式。定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个目标对象。这个对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。主要角色如下:Subject:可以有任意多个观察者观察同一个目标,提供注册和删除观察者对象的接口。Observer:为那些在目标发生改变时需要获得通知的对象定义一个更新接口。ConcreteSubject:将有关状态存入concreteObserver对象,当状态发生改变时,向它的各个观察者发出通知。ConcreteObse

2020-06-27 17:31:05 192

原创 redis源码解析之链表结构

双端链表节点typedef struct listNode { struct listNode *prev; // 前置节点 struct listNode *next; // 后置节点 void *value; // 节点的值} listNode;双端链表节点包含2个指针域和1个数据域,注意数据的类型为void*,因此其可以承载任意数据类型。双端链表结构typedef struct list { listNode *head; // 表头节点 lis

2020-06-27 13:42:19 93

原创 单例模式原理与C++实现

定义单例模式,即整个进程中只有一个该类的对象实例,不再有第二个实例,如一个班级只有一个班主任。单例模式有利于节省系统资源。单例类遵循以下设计原则:单例类只能有一个实例单例类必须自己创建自己的唯一实例单例类必须给所有其他对象提供这一实例单例模式有饿汉和懒汉两种实现模式。饿汉模式class Singleton {private: static Singleton* obj; Singleton() {} //私有化构造函数 Singleton(const Singleton&)

2020-06-26 17:21:59 319

原创 抽象工厂模式原理与C++实现

定义抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。抽象工厂模式包含的角色有:抽象工厂:用于声明生产抽象产品的接口具体工厂:实现抽象工厂中生成抽象产品的方法,生成一系列具体产品。抽象产品:用于声明每种产品的接口具体产品:定义具体的产品,以及实现抽象产品中的接口方法C++实现#include <iostream>#include <memory>using namespace std;//抽象产品Aclass Abstract

2020-06-26 16:19:35 191

原创 工厂方法模式原理与C++实现

工厂方法模式在简单工厂方法模式中,如果我们需要添加新的需求(产品)时,那么就需要修改工厂类的方法,这显然违背了开放-封闭原则。而工厂方法模式可以避免这一点,因为该模式中每一个具体的产品都有一个对应的工厂类,也就是对于A产品,有一个创建A产品对象的A工厂,而对于B产品,则有一个B工厂。所以当需求增加时,只需要再增加一个产品类和对应的工厂类即可。C++实现#include <iostream>#include <memory>using namespace std;class

2020-06-26 15:26:36 134

原创 简单工厂模式原理与C++实现

为什么使用简单工厂模式?简单工厂模式的机制就是将一个个具有着相同功能,不同实现的类的对象创建过程放到一个工厂中来实现。这样做的好处就是,我们不需要再去考虑怎么创建一个对象,只需要调用工厂方法,并传入对象类型即可创建出我们想要的对象。从而有效降低模块之间的耦合。简单工厂模式实现#include <iostream>#include <memory>using namespace std;class Product {public: virtual void show(

2020-06-26 14:51:23 171

原创 C++对象池自动回收技术

什么是对象池    类似于内存池机制,对象池中存放有已经分配好的对象,当需要使用时,只需要向对象池申请。而不再使用时,则由对象池自动回收。适用于一下情况:对象可重用对象创建开销大对象创建频繁如何实现自动回收    C++11中的智能指针可以自定义删除器,在回收时智能指针自动调用自定义的删除器实现对象的自动回收。那么何时定义删除器呢?如果我们在添加对象时定义删除器,那么对象被回收后就失去了自定义的删除器。因此我们可

2020-06-24 23:51:45 863

原创 C++中的异常处理

异常处理的基本语法try {/*代码块*/}catch (/*异常类型*/) {/*处理异常*/ }...catch (/**异常类型/) {/*处理异常*/}    至少有一个catch块,当try块中的代码执行没有出现异常,则跳过所有catch块继续执行;否则从第一个catch块匹配合适的异常类型后进入catch块中进行异常处理。如: int a = 10, b = 0; try { if (b == 0) throw 1; //抛

2020-06-24 22:32:57 289

原创 C++字符串操作总结

char*与string    char属于指针类型,string是C++中的类,其底层是通过char类型的指针来实现的,即string对象中包含了一个char*类型的成员。通过如下方式可以获取该指针成员:string str = "nihao";//data()返回的是const char*类型,意思就是阻止外部修改const char* data1 = str.data();cout << "data1=" << data1 &l

2020-06-24 21:17:53 475

基于gmock实现的cppmockfree的使用方法总结

C++单元测试中,我们常常需要使用到gmock,但是gmock只能mock虚函数,如果要mock非虚成员函数、静态成员函数、全局函数、重载函数、模板函数以及其他依赖库的函数时,gmock就很难实现。而cppmockfree可以支持这些函数的mock。cppmockfree是基于gmock实现的,相较于gmock更容易使用,并且支持更多场景下的函数mock。本文介绍了cppmockfree的相关使用语法,并针对不同测试场景给出了测试样例,以及如何引入cppmockfree。

2023-08-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除