日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#構(gòu)造函數(shù)與C++的區(qū)別淺析

C#構(gòu)造函數(shù)與C++的區(qū)別1、

C++ 不允許在一個構(gòu)造函數(shù)中調(diào)用另外一個構(gòu)造函數(shù)(稱為委派構(gòu)造函數(shù)調(diào)用),而 C# 則允許。例如:

C++構(gòu)造函數(shù)示例:

 
 
 
  1. struct Point {
  2. public:
  3. int X, Y;
  4. Point(int x, int y);
  5. Point(Point pt) : Point(pt.X, pt.Y) { } // 錯誤,C++ 不允許
  6. }; 

C#構(gòu)造函數(shù)示例:

 
 
 
  1. struct Point {
  2. public int X, Y;
  3. public Point(int x, int y);
  4. public Point(Point pt) : Point(pt.X, pt.Y) { } // 可以,C# 允許
  5. }; 

委派構(gòu)造函數(shù)調(diào)用語法上非常自然和易懂,因此你也許會質(zhì)疑 C++ 不提供它是不是故意給程序員添麻煩。事實上,C++ 不提供這一特性并不是出于語法上的考慮,而是出于資源管理的考慮(噢,這樣的事情對 C++ 來說還有很多很多)。

我們知道,C++ 的構(gòu)造函數(shù)用于分配資源,而析構(gòu)函數(shù)用于釋放資源,構(gòu)造函數(shù)和析構(gòu)函數(shù)調(diào)用必須匹配,否則就打破了 C++ 的基本規(guī)則。

如果允許委派構(gòu)造函數(shù)調(diào)用,則顯然會打破這一規(guī)則——構(gòu)造函數(shù)被執(zhí)行兩次,而析構(gòu)函數(shù)只執(zhí)行一次。當(dāng)然,對一些類,例如前面的那個 Point 來說這不是個問題,但是從語言機制的角度講這個特性可能屬于“危險”的特性。注:在最新的 C++ 標(biāo)準(zhǔn)提議草案中,Herb 等人有一個關(guān)于允許委派構(gòu)造函數(shù)調(diào)用的提案,當(dāng)然這很大程度上是為了方便 C++/CLI 綁定。

C#構(gòu)造函數(shù)與C++的區(qū)別2、

在 C++ 構(gòu)造函數(shù)中,虛函數(shù)調(diào)用會被編譯器自動轉(zhuǎn)為普通函數(shù)調(diào)用,而在 C# 構(gòu)造函數(shù)中允許進行虛函數(shù)調(diào)用。C++ 這樣處理自然有它的原因——在 C++ 中,構(gòu)造函數(shù)執(zhí)行完成后對象才初始化好,對于多態(tài)對象來說,也就意味著構(gòu)造函數(shù)在背后執(zhí)行了很重要的一件事情——初始化對象的虛函數(shù)表。

如果我們在基類的構(gòu)造函數(shù)中調(diào)用了虛函數(shù),則因為此時對象的虛函數(shù)表仍舊是基類的虛函數(shù)表,所以無法進行正確的虛函數(shù)調(diào)用。也就是這個原因,通常我們應(yīng)該避免在構(gòu)造函數(shù)中調(diào)用虛函數(shù),因為它違背了虛函數(shù)的語義。而在 C# 中,在對象的構(gòu)造函數(shù)執(zhí)行之前對象的類型信息就已經(jīng)初始化好了,所以可以進行正常的虛函數(shù)調(diào)用。

C#構(gòu)造函數(shù)與C++的區(qū)別的基本情況就向你介紹到這里,希望對你學(xué)習(xí)C#構(gòu)造函數(shù)與C++的區(qū)別有所幫助。


標(biāo)題名稱:C#構(gòu)造函數(shù)與C++的區(qū)別淺析
網(wǎng)頁網(wǎng)址:http://www.5511xx.com/article/djgjjsc.html