C++中final,finally,finalize的區(qū)別有哪些

這篇文章主要介紹了C++中final, finally, finalize的區(qū)別有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

為成都等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及成都網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都做網(wǎng)站、成都網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

C++11標(biāo)準(zhǔn)提供了說明符final。需要注意的是,C++11中的final不是關(guān)鍵字,而是說明符,這意味著您可以將它(在不引起混淆的情況下)將它作為標(biāo)識符使用(為了兼容以前的代碼)。關(guān)鍵字final有“這是無法改變的”或者“終態(tài)的”含義,它可以修飾非抽象類、非抽象類成員方法和變量。

C++11標(biāo)準(zhǔn)提供了說明符final,用于阻止派生類覆蓋特定的虛方法?;蚴亲柚挂粋€類成為基類。

語法1:class Someclass final {...};

語法2:class Someclass {...type somefun(arg-list) final;...};

class A
{
private:
public:
virtual void Test()const final
{std::cout<<c<<std::endl;}
//final修飾了put()函數(shù),使其不能被覆蓋

};
 
classB:publicA
{
private:
public:
//這里不能有void  Test();了,因?yàn)橛辛薴inal說明符

};
 

class A  final//final修飾Z類,您不能從Z類派生出一個類,而只能用于創(chuàng)建對象
{
private:

public:
void Test()const{std::cout<<d<<std::endl;}
};
 
int  main()  //修飾變量,變量不可變
{

char final ='X';//可以這么做
Xx(final);
x.put();//輸出X
Yy;
y.put();//輸出B
Zz(3.14159);
z.put();//輸出3.14159
return0;
}

finalize-方法名。Java技術(shù)允許使用finalize() 方法在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。

這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調(diào)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize()方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前被自動調(diào)用的。

垃圾收集器只知道釋放那些由new分配的內(nèi)存,所以不知道如何釋放對象的“特殊”內(nèi)存。為解決這個問題,Java提供了一個名為finalize()的方法,它的工作原理應(yīng)該是這樣的:一旦垃圾收集器準(zhǔn)備好釋放對象占用的存儲空間,它首先調(diào)用finalize(),而且只有在下一次垃圾收集過程中,才會真正回收對象的內(nèi)存。所以如果使用finalize(),就可以在垃圾收集期間進(jìn)行一些重要的清除或清掃工作(如關(guān)閉流等操作)。但JVM(Java虛擬機(jī))不保證此方法總被調(diào)用。

Finalize 操作具有下列限制:

垃圾回收過程中執(zhí)行終結(jié)器的準(zhǔn)確時間是不確定的。不保證資源在任何特定的時間都能釋放,除非調(diào)用 Close 方法或 Dispose 方法。

即使一個對象引用另一個對象,也不能保證兩個對象的終結(jié)器以任何特定的順序運(yùn)行。即,如果對象 A 具有對對象 B 的引用,并且兩者都有終結(jié)器,則當(dāng)對象 A 的終結(jié)器啟動時,對象 B 可能已經(jīng)終結(jié)了。

運(yùn)行終結(jié)器的線程是未指定的。

在下面的異常情況下,F(xiàn)inalize 方法可能不會運(yùn)行完成或可能根本不運(yùn)行:

另一個終結(jié)器無限期地阻止(進(jìn)入無限循環(huán),試圖獲取永遠(yuǎn)無法獲取的鎖,諸如此類)。由于運(yùn)行時試圖運(yùn)行終結(jié)器來完成,所以如果一個終結(jié)器無限期地阻止,則可能不會調(diào)用其他終結(jié)器。

進(jìn)程終止,但不給運(yùn)行時提供清理的機(jī)會。在這種情況下,運(yùn)行時的第一個進(jìn)程終止通知是 DLL_PROCESS_DETACH 通知。

在關(guān)閉過程中,只有當(dāng)可終結(jié)對象的數(shù)目繼續(xù)減少時,運(yùn)行時才繼續(xù) Finalize 對象。

finally在異常處理時提供finally塊來執(zhí)行所有清除操作。主要與try-catch-finally配合使用。

finally語句塊的作用是無論出現(xiàn)什么情況,finally塊中的語句一定會被執(zhí)行,并且是在return之前執(zhí)行。根據(jù)JAVA規(guī)范,如果try-finally或者catch-finally中都有return,則2個return都執(zhí)行并最終返回調(diào)用者那里的是finally中的return,如果finally中沒有return則返回的是catch中的return,但是finally中的代碼也是要執(zhí)行的。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C++中final, finally, finalize的區(qū)別有哪些”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

網(wǎng)頁標(biāo)題:C++中final,finally,finalize的區(qū)別有哪些
當(dāng)前地址:http://muchs.cn/article4/jcppoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站排名、用戶體驗(yàn)、外貿(mào)建站、網(wǎng)站改版、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營