原创 CRITICAL_SECTION同步易出錯的地方

衆所周知通過CRITICAL_SECTION可以對多個線程同步,然而加鎖和解鎖的次數不匹配將導致死鎖: class CLock { public: CLock() { InitializeCriticalSection(&m_c

原创 Boost::Utility庫 之enable_if

enable_if 頭文件: "boost/utility/enable_if.hpp" 有時候,我們希望控制某個函數或類模板的特化是否可以加入到

原创 cin標準輸入流錯誤清理

cin.sync()函數 這個是用來清空cin緩衝區裏面未讀取的信息... 例子: #include <iostream> using namespace std; int main () { char first, sec

原创 把SEH類型的系統異常轉化爲C++類型的異常

       做一件事情之前,我們最好要搞清爲什麼!“十萬個爲什麼” 可曾造就了多少頂級奇才!呵呵! WHY? ? WHY ? WHY ?這對任何一

原创 使用_CrtSetDbgFlag檢測內存泄露

  介紹: 動態分配、回收內存是C/C++編程語言一個最強的特點,但是中國哲學家孫(Sun Tzu,我不知道是誰?那位知道?)指出,最強的同時也是

原创 SEH轉化爲C++異常

 //=======================================================================

原创 讓程序隨系統啓動

 Windows啓動時通常會有一大堆程序自動啓動。不要以爲管好了“開始→程序→啓動”菜單就萬事大吉,實際上,在Windows   XP/2K中,讓Windows自動啓動程序的辦法很多,下文告訴你最重要的兩個文件夾和八個註冊鍵。      

原创 智能指針 _com_ptr_t的使用

對於COM調用,大量的AddRef/Release調用無疑是例行公事和讓人生厭。 _com_ptr_t 是vc運行庫中提供的固有的封裝COM接口的智能指針,相比CComPtr/CComQIPtr缺少移植性, 但是支持不是ATL實現部分的的

原创 補一點COM的知識,有關_com_ptr_t

TLB文件是一個說明文件,通過TLB文件,用戶可以得知你的DLL文件中的COM接口 以及常量等的信息,這樣一來用戶才知道你的DLL中有什麼接口與常量等,用戶才 能用你的接口,當然了,如果你的COM接口只想自己使用,你可以不做TLB文件告訴

原创 學習筆記:shared_ptr陷阱

  條款1:不要把一個原生指針給多個shared_ptr管理 int* ptr = new int; shared_ptr<int> p1(ptr); shared_ptr<int> p2(ptr); //log

原创 shared_ptr解析

shared_ptr解析 《超越C++標準庫-Boost庫導論》 頭文件: "boost/shared_ptr.hpp" 幾乎所有稍微複雜點的程序都需要某種形式的引用計數智能指針。這些智能指針讓我們不再需要爲了管理被兩個或多個對象共享的對

原创 C++轉型操作符:const_cast、dynamic_cast、static_cast、reinterpret_cast

C++轉型操作符   C++通過引進四個新的類型轉換操作符克服了C風格類型轉換的缺點,這四個操作符是: const_cast<T>( expression ) dynamic_cast<T>( expression ) stati

原创 當析構函數遇到多線程 ── C++ 中線程安全的對象回調

轉自:http://www.cnblogs.com/Solstice/archive/2010/02/10/dtor_meets_threads.html#_Toc8041 摘要 編寫線程安全的類不是難事,用同步原語保護內部狀態即可。但

原创 c++字節對齊

規定各成員變量存放的起始地址相對於結構的起始地址的偏移量必須爲該“變量的類型”或者指定對齊係數所佔用的字節數的倍數,當變量類型和指定係數不同時,取小的。整個結構大小按照以上對齊計算,但必須是最大類型大小或者指定對齊係數的整數倍,也就是最

原创 operator=返回對象和引用的區別

class CTest { public: CTest() { printf("Constructor function is executed now!\n"); } CTest(int nID) { printf