cpp C 中的託管

2022-09-18 19:42:11 字數 1639 閱讀 9759

c++程式語言從發展至今已經歷經20年之久,我們在下面首先介紹了這一程式語言的基本概念以及構成。在大家了解完這些內容後,我們會進入近體那的主題,那就是為大家介紹什麼事c++託管?

c++這個詞在中國大陸的程式設計師圈子中通常被讀做「c加加」,而西方的程式設計師通常讀做「c plus plus」,「cpp」。 它是一種使用非常廣泛的計算機程式語言。c++是一種靜態資料型別檢查的,支援多重程式設計正規化的通用程式語言。它支援過程化程式設計、資料抽象、物件導向程式設計、製作圖示等等泛型程式設計等多種程式設計風格。

根據effective c++第三版第一條款的描述,現在c++由以下四個「子語言」組成:

1、c子語言。c++支援c語言的幾乎全部功能,在語法上與c語言僅有極微妙的差別(如括號表示式的左右值性,具體請參考c++標準文獻)。

2、物件導向的c++。c++首先作為一門物件導向的語言而聞名,這個特點在這裡不再詳述。

3、泛型程式語言。c++強大(但容易失控的)模板功能使它能在編譯期完成許多任務作,從而大大提高執行期效率。

4、stl(c++標準模板庫)。隨著stl的不斷發展,它已經逐漸成為c++程式設計中不可或缺的部分,其效率可能比一般的*******低些,但是其安全性與規範性使它大受歡迎。

在回答這個問題,首先要搞清楚什麼是「託管」(managed)。託管是.net的乙個專門概念,它是融於通用語言執行時(clr)中的一種新的程式設計理念,因此我們完全可以把「託管」視為「.net」。那麼什麼是「通用語言執行時」?通用語言執行時是.net 框架應用程式的執行引摯。它提供了許多服務,其中包括:**管理(裝入和執行)、型別安全性驗證、元資料(高階型別資訊)訪問、為管理物件管理記憶體、管理**,com物件和預生成的dlls(非管理**和資料)的交互操作性、對開發人員服務的支援等等。 

也就是說,使用c++託管意味著,我們的**可以被clr所管理,並能開發出具有最新特性如垃圾自動收集、程式間相互訪問等的.net框架應用程式。 

由託管概念所引發的c++應用程式包括託管**、託管資料和託管類三個組成部分。 

(1) 託管**:.net環境提供了許多核心的執行(runtime)服務,比如異常處理和安全策略。為了能使用這些服務,必須要給執行環境提供一些資訊**(元資料),這種**就是託管**。所有的c#、vb.net、jscript.net預設時都是託管的,但visual c++預設時不是託管的,必須在編譯器中使用命令列選項(/clr)才能產生託管**。 

(2) 託管資料:與託管**密切相關的是託管資料。託管資料是由公共語言執行的垃圾**器進行分配和釋放的資料。預設情況下,c#、visual basic 和 jscript.net 資料是託管資料。不過,通過使用特殊的關鍵字,c# 資料可以被標記為非託管資料。visual c++資料在預設情況下是非託管資料,即使在使用 /clr 開關時也不是託管的。 

(3) 託管類:儘管visual c++資料在預設情況下是非託管資料,但是在使用c++託管擴充套件時,可以使用「__gc」關鍵字將類標記為託管類。就像該名稱所顯示的那樣,它表示類例項的記憶體由垃圾**器管理。另外,乙個託管類也完全可以成為 .net 框架的成員,由此可以帶來的好處是,它可以與其他語言編寫的類正確地進行相互操作,如託管的c++類可以從visual basic類繼承等。但同時也有一些限制,如託管類只能從乙個基類繼承等。需要說明的是,在c++託管應用程式中既可使用託管類也可以使用非託管類。這裡的非託管類不是指標準c++類,而是使用託管c++語言中的__nogc關鍵字的類。

C 中的託管和非託管

注意!先看左上角宣告!我不想誤人子弟!但我不怕思考。沒有思考就沒有錯誤,互相學習,共同進步!如果這句話是對的,應該是對的,那麼託管就好理解了,自己搜中間語言去 我們編寫的語言要通過中間語言來翻譯即所謂的託管給il 那麼非託管就是不用il即不用中間語言翻譯,別人 微軟把 已經把這個語句翻譯好了,說白了...

cpp C 中類和結構體的區別

在c 中,結構體和類基本一致,除了小部分不同。主要的不同是在訪問的安全性上。在類中預設的訪問許可權是private,而結構體是public。當從基類 結構體中派生時,類的預設派生方式是private,而結構體是public。include class test int main program 2 ...

在非託管環境中呼叫託管物件

如果要在mfc專案中支援託管擴充套件,可以使mfc工程通過開啟專案的託管擴充套件屬性開關。在開啟託管擴充套件編譯開關以後,你就可以在mfc專案中使用託管物件了,通常的做法是 為每個重要的mfc物件匹配乙個託管物件以形成乙個對偶對,彼此匹配的物件包含指向對方的指標,這樣,其他.net物件可以通過對偶對...