回覆列表
  • 1 # 使用者3296806220335

    所謂託管是指記憶體管理由系統而不是由程式設計師管理。

    像C#這樣的語言的記憶體管理(記憶體的分配和釋放)都是由系統管理的。所以只有new而沒有delete。

    C++有個很重要的特點就是記憶體由程式設計師管理。所以分配記憶體以後,要程式設計師自己釋放。如果沒有釋放就會有記憶體洩露,如果在不該釋放時釋放了,就會出現所謂的野指標。

    在C++把記憶體管理交給系統的,由系統來負責釋放,就被稱為託管。

    託管C++是微軟所創造一種擴充套件C++的一種叫法。英文寫出來是Managed C++,就更能看出宣傳有系統管理記憶體這個意思。

    其實這可以看出微軟的一個噱頭。儘管在當時引起了很多人的興趣,但多數對所謂的Managed C++不滿意。所以後來微軟推出了C++/CLI,相對Managed C++對標準的C++做了很多更激進的改造。當然C++/CLI依然有系統(準確的說是.net框架)管理記憶體功能,所以也有人把C++/CLI依然稱為託管C++。

    說道區別,你可以簡單的把託管C++看成在語言層次上支援.net框架。

    但嚴格的說沒有非託管C++,因為託管只是一種對C++的擴充套件。使用標準C++理論上說也可以支援.net框架。就像支援其他系統一樣。不使用.net框架,也C++可以利用別的辦法由系統來管理記憶體。

    區別主要在語言層次上,以C++/CLI為例:

    C++/CLI有一種特殊的語法,託管指標(或者說是控制代碼),用^表示

    比如System::String^ s = "abc";

    這樣的就是C++/CLI特有的。

    很多純C++支持者,對這種做法嗤之以鼻。因為使用了這種語法的C++的程式在別的編譯器下肯定通不過。

    我個人到不覺得有什麼。C++/CLI可以說是C++的一個變種。語法的角度看是C++的一個超集。如果你的程式沒有移植要求,而且又需要使用.net框架,到的確是個不錯的選擇。

  • 中秋節和大豐收的關聯?
  • 鄭國怎麼成為霸主的?