C++句柄與指針的區別

 學習C++的人都知道句柄和指針,而且我發現很多人在句柄與指針之間直接劃等號,對我們來說兩者都是地址,我覺的這也造成很多人將句柄和指針劃等號的直接原因。

  首先說指針吧。通俗一點就是地址,他是內存的編號,通過它我們可以直接對內存進行操作,只要地址不變,我們每次操作的物理位置是絕對不變,記住這句話,這是句柄和指針的重大區別所在。

  再說說句柄吧,一般是指向系統的資源的位置,可以說也是地址。但是這些資源的位置真的不變,我們都知道window支持虛擬內存的技術,同一時間內可能有些資源被換出內存,一些被換回來,這就是說同一資源在系統的不同時刻,他在內存的物理位置是不確定的,那麼window是如何解決這個問題呢,就是通過句柄來處理資源的物理位置不斷變化的這個問題的。window會在物理位置固定的區域存儲一張對應表,表中記錄了所有的資源實時地址,句柄其實沒有直接指向資源的物理地址,而是指向了這個對應表中的一項,這樣無論資源怎樣的換進換出,通過句柄都可以找到他的實時位置。

  總的來說,通過句柄可以屏蔽系統內部的細節,讓程序設計可以不必考慮操作系統實現的細節。如果還不能理解句柄與指針之間的區別,可以想象指向指針的指針,可以把句柄當作一個指向指針的指針來理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章