原创 C++ boost庫智能指針(四):intrusive_ptr
intrusive_ptr這個智能指針不怎麼好用,雖然它和shared_ptr也是基於引用計數的,但需要自己來實現引用計數的增加與減少。需要在我們管理的指針對象中添加一個計數的成員,例如下面的類Test. 頭文件:
原创 C++ boost庫智能指針(一):scoped_ptr 與 scoped_array
智能指針是C++11更新以後一直很熱門的技術,這重點區分了C與C++,智能指針給C++程序員的內存管理帶來了便利,同時也有風險,用不好容易翻車。 boost提供了6種智能指針,scoped_ptr, sc
原创 C++ boost庫智能指針(二):shared_ptr和shared_array
shared_ptr是boost最重要的智能指針,最像智能指針的"智能指針", 由於它的優越表現,被加入了C++11標準。 shared_ptr與scoped_ptr —樣包裝了 new操作符在堆上分配的動
原创 C++ boost庫智能指針(三):weak_ptr
weak_ptr是shared_ptr得到協助者,可以觀察shared_ptr是否過期,weak_ptr不改變引用計數,也不能使用 *,->操作符,是一個很弱的智能指針。例如下面的代碼: #include <iostre
原创 C++ 標準庫智能指針auto_ptr源碼分析
智能指針是C++標準中一個很重要的內容,它幫C++程序員解決了部分內存開闢與釋放的問題,使C++程序員可以和java, C#一樣不爲內存泄露而擔心。使用智能指針需要包含頭文件#include <memory>
原创 完美解決win10安裝svn出現2503,2502錯誤
如果win10是重裝的,或者是沒有管理員權限,安裝SVN時就會出現2503,2502的錯誤,導致無法安裝svn, 具體解決辦法如下: 右鍵win10左下角開始,打開紅色框的選項。 輸入ms
原创 Qt窗體工具欄事件響應與自定義
某些時候,工具欄可以提高軟件的使用效率,比如VS的調試,查找,上一步,下一步等,在開發時經常用到。本篇博客介紹如何在Qt窗體上添加工具欄。 用QtCreator新建一個GUI項目,繼承於QMainWindow
原创 Qt響應ctrl 鼠標滾輪字母等組合按鍵
一般的軟件會有很多組合快捷鍵,例如QQ截圖ctrl + alt + A, 微信截圖 alt A, 看PDF時ctrl + 鼠標滾輪進行縮放等。Qt對這些快捷鍵都有了實現,下面分別對這些功能做介紹並提供代碼實現。 1 鼠標按鍵
原创 ProcessExplorer查找C++ exe程序運行所需要的的dll
當我們把自己打包的exe程序放到別人電腦時可能出現缺少dll的情況,此時可以用ProcessExplorer工具找出對應的dll, 把exe先運行起來,將ProcessExplorer工具欄的靶子拖動到運行的exe窗口上,此
原创 C++數據結構:普通隊列與循環隊列
什麼是隊列? 隊列是一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。隊列中的數據元素遵循“先進先出”(First In First Out)的原則,簡稱FIFO結構。
原创 MFC CArchive類讀寫文件的應用
一 寫文件 CFile和CArchive進行綁定,CArchive把數據寫到文件中,代碼如下: CFile file; BOOL isOk = file.Open(L"1.txt", CFile::mode
原创 C++構造函數語義學之默認構造函數
在學C++時,通常有一種概念,在創建類對象時,如果沒有構造函數,那麼會調用默認的構造函數,並且把相關成員賦值爲0,這句話正確嗎,看看下面這個例子: #include <iostream> using namespac
原创 STL仿函數與函數對象淺析
例如,一個很簡單問題,求兩個數中的較大數,用C++代碼很好寫,如下: int Max(const int num1, const int num2) { return num1 >= num2 ? num1 : num
原创 STL multiset使用說明與代碼演示
STL multiset特點 (1)數據有序,可重複 (2)刪除元素時,相同的所有元素都會被刪掉 使用時需要包含頭文件<set>. 代碼: #include <ios
原创 C++增強for循環
for循環是常見的代碼語句,常規的for循環如下 #include <iostream> using namespace std; int main() { int array[] = { 1,1,2,3,5,8