自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c++11实现的一个消息总线框架

最近在看C++11的特性,然后按照网上的例子实现了一个消息总线框架。https://github.com/hejiajie1989/MessageBus项目里README文档里有详细的设计说明,使用的时候 g++ test.cpp -o test -std=c++11 g++ TestMessageBus.cpp -o TestMessageBus -std=c++11

2017-07-17 11:49:59 3404

原创 C++11新特性--线程库相关

线程的创建std::thread t() 提供线程函数或者函数对象 t.join() 阻塞线程直到线程函数执行完毕 t.detach() 如果不希望线程被阻塞执行就调用detach(),但是这会导致线程和线程对象分离。std::thread创建的线程在出了作用域之后会被析构,如果这时候线程函数还没有执行完的话就会发生错误。线程不能复制,但是可以移动std::thread t(func);st

2017-07-07 08:44:37 640

原创 深入探索C++对象模型之七 --- 站在对象模型的尖端

深入探索C++对象模型之七 — 站在对象模型的尖端template instantiation 模版具现化 template、exception handling和runtime type idetificationTemplate模版只是定义了函数tempalte的声明当我们声明template的时候,编译器对于声明代码是不做任何处理的,只有在程序中使用到了具体类型的类或者函数的时候,编译器才会

2017-06-12 21:42:24 431

原创 深入探索C++对象模型之六 --- 执行期语意学

深入探索C++对象模型之六 — 执行期语意学

2017-06-07 14:34:27 474

原创 深入探索C++对象模型之五 --- 析构、构造、拷贝语意学

深入探索C++对象模型之五 — 析构、构造、拷贝语意学一般而言,class的data member应该被初始化,并且只在constructor中或是在class的其它member functions中指定初值,其它任何操作都将破坏封装性质,使class的维护和修改更加困难。纯虚函数我们可以定义和调用一个pure virtual function:不过它只能被静态的调用,不能经由虚拟机制调用。而对于p

2017-06-06 01:36:16 638

原创 IO多路复用之epoll

IO多路复用之epoll总结基本概念相对于之前介绍的select和poll, epoll更加的灵活而且没有描述符数量的限制。epoll使用一个文件描述符管理多个描述符,将用户关心的文件描述符以及事件存放到内核的一个事件表中,这样在用户空间和内核空间只需要copy一次。epoll接口int epoll_create(int size);int epoll_ctl(int epollfd, int o

2017-06-05 15:08:56 450

原创 深度探索C++对象之四 --- Function语意学

深度探索C++对象模型 — Function语意学

2017-05-22 20:12:16 685

原创 构造函数不能声明为虚函数, 析构函数可以

构造函数不能声明为虚函数, 析构函数可以

2017-05-19 18:47:57 578

原创 深度探索c++对象模型之三 --- Data语意学

深度探索c++对象模型之三 — Data语意学

2017-05-18 08:41:29 824

原创 深度探索C++对象模型之一 --- 关于对象

深度探索C++对象模型之一 — 关于对象

2017-05-11 22:39:56 841

原创 深入探索C++对象模型之二 --- 构造函数语意学

深入探索C++对象模型之二 — 构造函数语意学

2017-05-11 00:54:26 452

原创 TCP连接分析

TCP连接的建立、终止以及状态变化

2017-05-10 00:12:57 732

原创 Muduo之Channel源码解析

Muduo之Channel源码解析前面我们分析了Acceptor处理连接请求,之后创建TcpConnection对象分发给合适的EventLoop,而TcpConnection里面是包含Channel,EventLoop以及相应的socket fd的,我们就可以假想成TcpConnection是针对一个连接的所有东西(socket,回调函数等)。但是对于socket的事件监听最后是需要装载到Pool

2017-05-08 12:25:01 697

原创 设计模式之12--代理模式

代理模式学习笔记

2017-05-04 23:28:21 423

原创 设计模式之11--组合模式

组合模式学习笔记

2017-05-04 23:27:47 407

原创 设计模式之10--桥接模式

桥接模式学习笔记

2017-05-04 23:27:13 377

原创 设计模式之9--装饰者模式

装饰者模式笔记

2017-05-04 23:26:34 520

原创 设计模式之8 -- 适配器模式

适配器模式 学习笔记有时候我们需要现有的类,但是此类的接口不符合系统的需要,即接口不兼容。那么我们就需要引入适配器类来使得我们目标接口和原来的类接口兼容。适配器模式定义: 将一个接口转换成客户希望的另一个接口,使得接口不兼容的那些类可以一起工作,其别名为包装器(wrapper)。 适配器模式可以作为类结构型模式,也可以作为对象结构型模式适配器模式一共有两种情况。一种是类适配器,还有一种是对象适配器。

2017-05-04 23:25:56 392

原创 设计模式之7 -- 外观模式

外观模式学习笔记

2017-05-04 23:25:12 414

原创 设计模式之6 -- 建造者模式

建造者模式笔记

2017-05-04 23:24:28 354

原创 设计模式之5 -- 原型模式

原型模式学习笔记通过一个原型对象克隆出多个一模一样的对象,该模式称之为原型模式。定义:使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。通过克隆所创建的对象是全新的对象,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法实现。原型模式结构图 如下图所示:在原型模式中包含如下几个角色:抽象原型类,声明克隆方法的接口,是所有具体原型类的公共父类。具体原型类

2017-05-04 23:23:41 370

原创 设计模式之4--单例模式

单例模式

2017-05-04 23:22:21 352

原创 设计模式之3--抽象工厂模式

抽象工厂模式

2017-05-04 23:21:35 363

原创 设计模式之2--工厂方法模式

工厂模式学习笔记

2017-05-04 23:19:56 350

原创 Muduo之TcpConnection源码分析笔记

Muduo之TcpConnection源码分析笔记

2017-05-04 23:13:56 503

原创 Muduo之Acceptor源码分析笔记

Muduo之Acceptor源码解析

2017-05-04 22:29:01 625

原创 设计模式之1--简单工厂模式

简单工厂模式学习笔记

2017-05-03 14:33:07 367

原创 TCP/IP协议--IP层ip_local_deliver实现

上一节说到当判断该数据报文是发送给本机的话那么就会直接到ip_local_deliver()进行处理ip_local_deliver对于收到的IP报文需要传递给更上层的协议去处理,但是如果收到的是IP分片的那么就需要在往上层传递之前先进行重组,这些就是在ip_local_deliver()函数里面进行的。我们看下代码:/* * Deliver IP Packets to the higher p

2017-04-25 20:25:54 3446

原创 Linux网络编程之I/O复用

Linux编程之IO多路复用(I/O Multiplexing)程序设计过程中有时候会对多个输入进行操作,例如标准输入或者多个socket。那么如果在对某个进行处理的时候阻塞住的话,另外的输入进来的话会得不到及时的处理。(比如客户端程序调用fgets/cin的时候会阻塞在标准输入的地方,此时如果有监听的socket请求连接的话是得不到及时处理的)。对于这种情况就需要当内核发现我们指定的IO

2017-04-24 01:02:38 2367

原创 设计模式之13--享元模式

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2017-04-19 00:11:47 582

原创 第七章 函数

1. 函数不能返回另一个函数或者内置数组类型,但是可以返回指向函数的指针,或指向数组元素的指针int *foo_bar() {/*....*/}2. 函数必须指定返回类型,至少也要void3. c++是一种静态强类型语言,每一次函数调用,编译时都会检查实参。4.如果形参具有非引用类型,则复制实参的值,对形参的修改不会影响实参的值,非引用形参就如何实参的局部副本;

2015-07-02 20:38:10 389

原创 第六章 语句

1. 在所有用过的类类型中,IO类型可以用作条件,但vector类型和string类型一般不可用作条件。2. 对于悬垂else语句,会普遍存在潜在的二义性,解决方法是通过将悬垂的else语句匹配给最后出现的尚未匹配的if子句。3. 在switch语句中,程序不是只会执行匹配的case标号关联语句。实际上,程序会从该点开始执行,并跨越case边界继续执行其他语句,直到swit

2015-06-30 21:10:17 405

原创 第十章 名字控制

在C和C++中,static都有两种基本的含义。1)在固定的地址上进行存储分配。也就是说对象是在一个特殊的静态数据区上创建的,而不是每次函数调用时在堆栈上产生的。这也是静态存储的概念。2)对一个特定的编译单位来说是局部的。这样,static控制名字的可见性,所以这个名字在这个单元或者类之外是不可见的。C和c++都允许在函数内部定义一个static对象,这个对象将存储在程序的静态

2014-11-16 23:06:42 569

原创 第九章 内联函数

在C中,保持效率的方法是使用宏(macro),宏的实现时依靠

2014-11-08 23:30:46 820

空空如也

空空如也

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

TA关注的人

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