久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2183|回復: 0
收起左側

c++中顯示析構問題

[復制鏈接]
ID:102668 發(fā)表于 2016-1-10 23:12 | 顯示全部樓層 |閱讀模式
昨天有人問我能不能顯示調用析構函數(shù)。
我的回答是可以。但為什么顯法調用析構函數(shù)跟沒有調用結果一樣的呢(未用new申請內(nèi)存空間)。
至于為什么,我今天在這里說下。

用構造函數(shù)創(chuàng)建對像后,程程序負責跟蹤對象直到過期為止。 對象過期時,程序將會自動調用一個析構函數(shù)。

構析函數(shù)完成清理工作。

例如 如構造函數(shù)用new分配內(nèi)存,則析構涵數(shù)將使用delete來釋放這些內(nèi)存。

下面是這篇帖子子的重點。


什么時候應調用析構函數(shù)呢?這個由編譯器決定,通常不應在代碼中顯示調用析構函數(shù)(布局new除外),如果創(chuàng)建的是靜態(tài)存儲類對象。則其析構涵數(shù)將在程序結束時自動調用。如果創(chuàng)建的是自動存儲類對象,則其析構函數(shù)將在程序執(zhí)行完代碼塊時自動調用。

如果對象是通過new創(chuàng)建的,則它將駐留在堆內(nèi)存或自由存儲區(qū)中,當使用delete來釋放內(nèi)存時,其析構函數(shù)將自動調用。
最后,程 序可以創(chuàng)建臨時對象來完成特定的操作,在這種情況下,程序將在結束對該對象的使用時自動調用其析構函數(shù)。

由于在類對象過期時析構函數(shù)將自動被調用,因此必須有一個析構函數(shù)。如果程序員沒有提供析構函數(shù),編譯器將隱式的聲名一個默認析構函數(shù),并在發(fā)現(xiàn)對象被刪除的代碼后,提供默認析構函數(shù)的定義。
上面我只是簡要的說了下析構函數(shù)。

#include<iostream>
using namespace std;
class wyz
{
private:
         int x;
public:  
     wyz(int g)
{  
          x=g;
     
        cout<<"調用構造函數(shù)\n";
}
    ~wyz()
{
   
       cout<<"調用析構函數(shù)\n";
}
    void fun()
{
        cout<<x<<endl;
}  
};

int main()
{
       wyz gg(10);
       gg.~wyz();
       gg.fun();
   

      return 0;
}

下面就說說為什么顯示調用函數(shù)(未使用new申請內(nèi)存)和沒有調用結果一樣。
首先析構函數(shù)和其它成員函數(shù)沒有多大區(qū)另,區(qū)別就是函數(shù)名特殊(名前加上了~),其次他會被編譯器自動調用。
除了這兩點之外他和別的成員函數(shù)沒什么區(qū)別(構造函數(shù)與此不同,這里就不說了)。
一個對象什么時候過期由他的作用域決定。對像過期了他里面存儲的數(shù)據(jù)也就不存在了。

當對象的引用或指針超出作用域時,不會運行析構函數(shù)。只有刪除指向動態(tài)分配對象的指針或實際
對象(而不是對象的引用)超出作用域時,才會運行析構函數(shù)。

在上面的代碼中gg這個對象的作用域中是從main()的左大括號到右大括號。
只要在這個作用內(nèi)對象gg就存在。
你雖然調用了wyz類的析構函數(shù),但gg沒有超出他的作用域故它是存在的。

說白了很簡單,一句話析構函數(shù)的作用是完成清理。要清理什么還是要程序員指定的。編譯器只不過幫助我們管理這個,讓程序員創(chuàng)建一個對象后就不會管理它的銷毀時間。
上面的這個析構函數(shù)里面什么也沒有定義。它什么也不做。(相當于一個空函數(shù))。你在這里調用他就跟你調用一個空函數(shù)的結果一樣。
要不問什么上面的程序中會調用兩次析構函數(shù)。第一次不用說是你自己調用的,第二次是編譯器調用的。對象并不是你調用了析構函數(shù)它就不調用了,只有在對象過期它才會銷毀。

很多人對析構函數(shù)的認識是這樣的。他們認為只要調用了析構函數(shù)對象就不存在了。這種認為是錯誤的。對象或變量的銷毀是由他所在的作用域決定的。(靜太的除外)沒有超出這個作用域它就存在,超出這個作用域就銷毀它。
到此相信大家都明白了吧。

至于用采用時new時的效果今天在這里就不說了。

最后聲名下,上面的都是我自己查找資料和自己的認為。有什么不對的地方望老師們能給指正出來。謝謝

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年人网站免费 | 欧美a在线 | 久久久久久成人 | 欧美天堂一区 | 精品精品视频 | 欧美毛片免费观看 | 亚洲a视频| 中文字幕av亚洲精品一部二部 | 国产一区 | 五月花丁香婷婷 | 欧美在线视频不卡 | 国内精品99 | 亚洲精品在线观 | av在线三级 | 最新国产福利在线 | 欧美国产精品久久久 | 一区二区在线免费播放 | 欧美日韩一二三区 | 在线不卡 | 天天操天天舔 | 亚洲一级黄色 | 性一爱一乱一交一视频 | 亚洲精品区 | 欧美激情精品久久久久 | 免费国产视频 | 久久9久 | 久久一区二 | 人人干在线| 区一区二区三在线观看 | 成人欧美一区二区三区黑人孕妇 | 成年人视频在线免费观看 | 久草视频观看 | 亚洲精品中文字幕在线观看 | 成人精品一区二区三区 | 91精品国产综合久久精品图片 | 久久精品欧美一区二区三区麻豆 | 国产91丝袜在线18 | 亚洲 中文 欧美 日韩 在线观看 | 一区二区三区亚洲 | 老司机成人在线 | 久久久久成人精品 |