您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(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è)資訊頻道。
免責(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)容。