C++/CLI相對純C++來說,支持創建托管引用對象,托管對象由虛擬機來分配內存和治理,程序員可以不再擔心內存洩漏的問題。其實,說白了也就是相當於自己創建一個內存池,並且虛擬機實際上也是這樣做的。
在CLI中,所有的類都從Object派生,包括int這樣的值。那麼Object的內部結構是怎麼樣的呢?通過對vm代碼的研究,可以看到大致上的結構如下:
用戶保存一個托管對象的句柄,其實可以看作是一個指向Object的指針,在Object裡面包含一個MethodTable的指針,這個 MethodTable保存了類型的信息以及一些函數,這就好比虛函數指針一樣。很多的操作都通過該指針來完成,比如Allocate(),比如Box (),UnBox()等等。緊跟在MethodTable後面的就是真實的數據了。
這個MethodTable是vm裡面很核心的一個類,通過它可以完成很多的操作。