原创 聊聊auto_ptr

雖然在C++11中,auto_ptr已經不推薦使用了,代之以功能類似的unique_ptr。但作爲曾經的一個C++重要存在,還是來簡單瞭解一下吧。 一、auto_ptr簡介 auto_ptr是C++的一個類,它的設計初衷是,動態分配對象以

原创 STL容器vector、list和deque的區別

容器用得太頻繁了,就開始關注效率的問題,在某些地方開始尋求替代方案。最近常用的幾個容器就是vector、list和deque。 vector和數組類似,擁有連續的內存空間,其起始地址是固定不變的,因此能支持很好地隨機存取,也就是能像數組一

原创 線程同步之信號量Semaphore

信號量是內核對象,它允許多個線程在同一個時刻訪問同一個共享資源,但是需要限制在同一時刻訪問此共享資源的最大線程數量。在創建信號量時,要指定允許的最大資源計數和當前可用的資源數。一般將當前可用資源數設置爲最大資源數,每增加一個線程對共享資源

原创 使用Makefile編譯帶源碼路徑的工程

昨天編譯一個工程,Makefile放在工程目錄,.cpp文件放在/source目錄下,頭文件.h放在/include目錄下。遇到了幾個問題,一番修改,終於改好,整理如下: 出問題的Makefile如下: INC = -I./includ

原创 pkg-config的作用和用法

以前不習慣用pkg-config,喜歡在Makefile中指定程序的依賴項。但是這樣做存在一個問題,即當你的機器上安裝了同一名稱但不同版本的依賴庫時,就有可能導致鏈接失敗。這時,pkg-config就顯示了它的優勢:使編譯選項簡潔明瞭。

原创 .cc與.cpp源文件混合編譯

工程中包含了兩個子目錄,include和source,分別存放了頭文件和源文件,頭文件和源文件都包含多種類型,頭文件包含了.h和.hpp,源文件包含了.cc和.cpp。在這種情況下,Makefile應該怎麼組織呢? |——————/inc

原创 如何在類中定義線程函數

在類裏面定義了幾個線程函數,用以訪問類成員,編譯的時候遇到了“error: invalid use of non-static member function”。測試代碼如下: #include <iostream> #include

原创 在軟件版本號中插入編譯時間和日期

手動維護軟件版本號和發佈時間是一件比較麻煩的事情,尤其是當大版本不變,但子版本迭代頻繁的時候,常常忘記更新發布時間,導致版本管理混亂。因此,最方便的方法就是自動嵌入版本編譯時間。 標準C中定義了一些預定義宏,以雙下劃線“__”開頭和結尾,

原创 SOLID軟件設計原則之SRP

本想把SOLID五大原則整理成一篇,放假在即,發現時間有點來不及了,只能分開來寫。 要構建一個良好的軟件系統,整潔的代碼和整潔的架構缺一不可。而我們在實際開發過程中,常常無視設計原則,“隨心所欲”地編程,當然,好的軟件系統需要工程師經驗的

原创 設計模式UML之創建型模式

這些天又把設計模式過了一遍,收穫很多。作爲回顧,畫一畫每種模式的UML類圖以加深印象。篇幅所限,本篇只限於創建型模式,包括:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。 1. 概述 設計良好的系統中,一個基本的要求就是高內

原创 用圖像像素填充輪廓內部

有個算法需求,要求保留原圖像上已知輪廓內部的圖像元素,而輪廓之外的區域則填成灰色。想了好幾種方法,都不夠簡潔方便,最後還是感覺OpenCV的copyTo()函數最簡潔。 copyTo()是OpenCV Mat類中的方法,有兩種用法,定義如

原创 程序運行時出現symbol loopup error

半年沒使用的一個軟件,再次運行時出現找不到符號的問題: symbol lookup error: /usr/lib/x86_64-linux-gnu/libGL.so.1: undefined symbol: __GLXGL_CORE_F

原创 SOLID軟件設計原則之LSP與DIP

SOLID軟件設計原則之SRP SOLID軟件設計原則之OCP原則 人們常常高估了一天能做的事情,卻低估了一年能得到的成就。時間倏忽而過,轉眼五一小長假只剩下最後一天,放假前列出的清單還有兩三件沒有完成,無論如何,依然按照計劃在最後一天看

原创 SOLID軟件設計原則之OCP原則

年前匆匆整理了一下SRP原則,即單一職責原則:SOLID軟件設計原則之SRP。趁着週末有時間,還一還之前欠下的債。 莊子《刻意》篇有云:“形勞而不休則弊,精用而不已則勞,勞則竭”。不停地忙碌容易讓人陷入疲倦,忘記爲何而出發,適當的閒暇纔是

原创 PMP成本管理中的幾個英文縮寫

趁着週末看一會兒PMP成本管理章節,被幾個名詞縮寫搞得有點暈頭,特意整理出來,以備隨時查閱。 1. PV - Planned Value, 計劃值,應該完成多少工作,舊稱BCWS(Budget Cost of Work Scheduled