溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

C++中如何使用析構(gòu)函數(shù)

發(fā)布時(shí)間:2021-07-19 17:45:03 來(lái)源:億速云 閱讀:198 作者:Leah 欄目:編程語(yǔ)言

本篇文章給大家分享的是有關(guān)C++中如何使用析構(gòu)函數(shù),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。

C#中的終結(jié)器(也就是析構(gòu)函數(shù))類(lèi)似于C++析構(gòu)函數(shù),但是由于編譯時(shí)無(wú)法確定終結(jié)器的執(zhí)行時(shí)機(jī),因此兩者實(shí)際上存在相當(dāng)大的區(qū)別。垃圾回收器調(diào)用C#終結(jié)器的時(shí)機(jī)是在對(duì)象上一次使用之后,但是在應(yīng)用程序關(guān)閉之前的某個(gè)時(shí)間。相反,只要一個(gè)對(duì)象(而非指針)超出范圍,(此處的范圍指作用域),就會(huì)自動(dòng)調(diào)用C++析構(gòu)函數(shù)。對(duì)此我還真有點(diǎn)懷疑,于是分別寫(xiě)了C++與C#的代碼看一下情況是否真的是這樣。

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;  namespace ConsoleApplication1  {  class Program  {  static void Main(string[] args)  {  test();  }  static void test()  {  myPeople p = new myPeople();  Console.WriteLine("Complate");  }  }  class myPeople  {  public myPeople()  {  Console.WriteLine("Construct");  }  ~myPeople()  {  Console.WriteLine("Dispose");  }  }  }

于是我分別在各個(gè)方法中插入斷點(diǎn)然后F5開(kāi)始逐步調(diào)試,我發(fā)現(xiàn)沒(méi)有myPeople的調(diào)用是在test()方法執(zhí)行完畢后,Main()方法結(jié)束執(zhí)行器調(diào)用的。再看C++

#include<iostream> #include<string> using namespace std;  class myPeople  {  public :  myPeople()  {  cout<<"Construct"<<std::endl;  }  ~myPeople()  {  cout<<"Dispose"<<std::endl;  }  };  void myMethod()  {  myPeople my;;  cout<<"Complate"<<std::endl;  }  int main()  {  myMethod();  }

通過(guò)上面的執(zhí)行過(guò)程就會(huì)發(fā)現(xiàn)確實(shí)如同本質(zhì)論作者說(shuō)的那樣,C#調(diào)用終結(jié)器與C++析構(gòu)函數(shù)區(qū)別是相當(dāng)大的。C#清理一個(gè)類(lèi)的資源并不是確定的,而C++類(lèi)資源的釋放是該類(lèi)超出作用域之后便開(kāi)始調(diào)用析構(gòu)函數(shù)。

以上就是C++中如何使用析構(gòu)函數(shù),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI