原创 設計模式之3--抽象工廠模式

抽象工廠模式 之前我們在學習工廠模式中,如果要增加一個產品,那麼就會同時增加一個具體產品類和對應的具體工廠類,這會導致系統中的類數量成對的增加,加重系統的負擔。而對於有些場景下我們使用的是一系列的類,這個時候我們就可以考慮將一些

原创 第十章 名字控制

在C和C++中,static都有兩種基本的含義。 1)在固定的地址上進行存儲分配。也就是說對象是在一個特殊的靜態數據區上創建的,而不是每次函數調用時在堆棧上產生的。這也是靜態存儲的概念。 2)對一個特定的編譯單位來說是局部的。這樣,sta

原创 第九章 內聯函數

在C中,保持效率的方法是使用宏(macro),宏的實現時依靠預處理器而不是編譯器。預處理器直接用宏代碼代替宏調用,這樣子就沒有了參數壓棧等開銷。但是在c++中,使用預處理宏有兩個問題: 1.宏看起來像函數調用但是不總是這樣,這樣就隱藏了難

原创 設計模式之13--享元模式

享元模式學習筆記 對於有時候系統中需要產生大量對象的情況,會造成系統性能下降,而這些對象之間的差別可能很小。比如圍棋中的棋子(之間唯一不同的也就是座標),又或者是火車票(相同的都是始發站和目的站,不同的是票的座位)。那麼如果可以

原创 TCP/IP協議--IP層ip_local_deliver實現

上一節說到當判斷該數據報文是發送給本機的話那麼就會直接到ip_local_deliver()進行處理 ip_local_deliver 對於收到的IP報文需要傳遞給更上層的協議去處理,但是如果收到的是IP分片的那麼就需要在往上層傳

原创 設計模式之5 -- 原型模式

原型模式學習筆記 通過一個原型對象克隆出多個一模一樣的對象,該模式稱之爲原型模式。 定義:使用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。原型模式是一種對象創建型模式。 通過克隆所創建的對象是全新的對象,創建克

原创 Linux網絡編程之I/O複用

Linux編程之IO多路複用(I/O Multiplexing) 程序設計過程中有時候會對多個輸入進行操作,例如標準輸入或者多個socket。那麼如果在對某個進行處理的時候阻塞住的話,另外的輸入進來的話會得不到及時的處理。(比如客

原创 Muduo之TcpConnection源碼分析筆記

Muduo之TcpConnection源碼分析筆記 上一節中我們分析到當TcpServer(Acceptor)檢測到讀事件時,就會創建一個TcpConnection對象,那麼這裏我們就分析下TcpConnection的細節。 首先

原创 設計模式之4--單例模式

單例模式 實際開發過程中,有時候需要確保系統中某個類只有唯一一個實例,當這個唯一的實例創建成功之後,我們無法再創建同類型的其他對象,之後所有操作都是基於這個唯一的實例。爲了實現這個目標,我們下面就學習下單例模式。 爲了實現類的唯

原创 Muduo之Acceptor源碼分析筆記

Muduo之Acceptor源碼解析 前面我們大概介紹了Muduo網絡庫的整體架構以及Reactor模式的一般架構,從這裏就開始分析Muduo網絡庫中用到的一些類。 本篇文章主要是介紹Acceptor muduo網絡庫的exam

原创 設計模式之1--簡單工廠模式

簡單工廠模式學習筆記 首先將需要創建的各種不同對象的相關代碼封裝到不同的類中,這些類成爲具體產品類,而將它們公共的代碼進行抽象和提取後封裝在一個抽象產品類中,每一個具體產品類都是抽象產品類的子類;然後提供一個工廠類用戶創建各種產

原创 設計模式之2--工廠方法模式

工廠模式學習筆記 之前我們學習了簡單工廠模式(靜態工廠模式),當具體產品類變多的話,工廠類中就會包含大量的if..else..代碼。其次,當增加新的具體產品類的時候,還需要修改工廠類的業務邏輯,違反了“開閉原則”。爲了解決這個問

原创 第七章 函數

1. 函數不能返回另一個函數或者內置數組類型,但是可以返回指向函數的指針,或指向數組元素的指針 int *foo_bar() {/*....*/}2. 函數必須指定返回類型,至少也要void 3. c++是一種靜態強類型語言,每一次函

原创 第六章 語句

1. 在所有用過的類類型中,IO類型可以用作條件,但vector類型和string類型一般不可用作條件。 2. 對於懸垂else語句,會普遍存在潛在的二義性,解決方法是通過將懸垂的else語句匹配給最後出現的尚未匹配的if子句。 3.

原创 深度探索c++對象模型之三 --- Data語意學

深度探索c++對象模型之三 — Data語意學 空類的大小也不會爲0,它有一個隱晦的1byte,是被編譯器安插進去的一個char,這使得class的兩個objects得以在內存中配置獨一無二的地址。 class X{}; class Y