正確理解Handle物件

2021-09-07 14:32:03 字數 1015 閱讀 8856

上古時期的程式設計師, 肯定都知道handle物件, 一般中文翻譯成控制代碼. 一般的handle在實現上, 都是乙個整數, 而這個整數可以理解為乙個指標, 指標指向的位址呢, 又儲存了另外乙個指標. 之所以這麼搞, 是因為這樣搞可以讓真實的物件可以挪動.

考慮乙個乙個物件a, 儲存在handle裡面, 由於某種原因, 我需要把這個物件a從原來的位置移走, 那麼移走之後的物件叫物件b, 那我只需要修改一下handle裡面的指標, 就可以保證正確性, 然後在使用者看來, 還是同乙個物件, 因為handle沒有改變.

正是因為handle這種特性, 所以可以基於handle做乙個gc系統. miloyip翻譯的那本遊戲程式設計的書裡面也講過, 之前在主機上有人用handle來管理記憶體.

而我這篇文章想說的是, handle這種特性其實還可以用在跟ui有關係的系統裡面. 試想乙個遊戲客戶端和伺服器要頻繁打交道, 然後c#這種引用語意的語言中, 很多程式設計師都會在ui層儲存乙個entity物件, 由於一些原因, 會導致整個系統內部會出現兩個entity物件, 其id一樣.

你可以說這是由於程式設計師的編碼不正確, 我也確信這一點. 但是我們要從根本層面上解決這個問題, 而不是把這個問題推卸給人.

由於我們知道handle可以讓我們把物件挪動, 那麼我們也只需要在c#造這樣乙個東西就行了. 這樣在使用的時候, 只讓程式設計師用handle來操作t這個型別的entity物件. 那麼系統內部, 就只會有乙個entity.

ps:一般比如檔案描述符/檔案都是乙個handle, 跟os打交道的硬體資源, 一般都是handle.

linux下, 乙個thread_t也是控制代碼~~

再比如, sun以前實現的jvm, 乙個reference也是乙個handle.

正確理解 clear both

要注意以下幾點 1 浮動元素會被自動設定成塊級元素,相當於給元素設定了display block 塊級元素能設定寬和高,而行內元素則不可以 2 浮動元素後邊的非浮動元素顯示問題。3 多個浮動方向一致的元素使用流式排列,此時要注意浮動元素的高度。4 子元素全為浮動元素的元素高度自適應問題。以下詳細分析...

正確理解 clear both

原文 要注意以下幾點 1 浮動元素會被自動設定成塊級元素,相當於給元素設定了display block 塊級元素能設定寬和高,而行內元素則不可以 2 浮動元素後邊的非浮動元素顯示問題。3 多個浮動方向一致的元素使用流式排列,此時要注意浮動元素的高度。4 子元素全為浮動元素的元素高度自適應問題。以下詳...

正確理解 clear both

要注意以下幾點 1 浮動元素會被自動設定成塊級元素,相當於給元素設定了display block 塊級元素能設定寬和高,而行內元素則不可以 2 浮動元素後邊的非浮動元素顯示問題。3 多個浮動方向一致的元素使用流式排列,此時要注意浮動元素的高度。4 子元素全為浮動元素的元素高度自適應問題。以下詳細分析...