资源描述:
《生存空間和生命週期以及多載化函式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、生存空間和生命週期以及多載化函式C++Primer第三版中文版Chap8.1~8.4Chap92021/8/91生存空間和生命週期以及多載化函式C++中有關宣告(declarations)的問題宣告動作所導入的符號名稱可以在何處使用?提示:C++scope(生存空間)包括globalscope,localscope,namespacescope.程式何時可以安全使用object或函式?提示:object的生命週期global:能夠維持生命到整個程式結束為止.local:只能在程式的部分期間維持生命.動態配置:期生命由程式員控制.2021/8/92生存空間和生命週期以及多載化函式L
2、ocalScope(區域性生存空間)所謂localscope是程式本文的部分範圍.位於一個函式區塊之內.每個函式都表現有各自的localscope.函式中每一個複合敘述句(或說區塊,block)也表現有它自己的一個localscope.localblockscopes可以巢狀出現.2021/8/93生存空間和生命週期以及多載化函式LocalScope範例intbinarySearch(intval,…){//binarySearch’sscopestart…inta;//scope包含binarySearch,while,if.while(…){//whileloopscopest
3、art…intb;//scope包含while,if.if(…){//ifstatementscopestart…intc;//scope包含if.}//ifstatementscopeend…}//whileloopscopeend…}//binarySearch’sscopeend…2021/8/94生存空間和生命週期以及多載化函式全域物件(GlobalObjects)&全域函式(GlobalFunctions)函式如果宣告在於globalscope中,便是一個全域函式.變數如果宣告在於globalscope中,便是一個全域物件.全域物件是整個程式執行期間都存在的一個物體,生命
4、期從程式啟動開始,直到程式結束.全域物件和non-inline全域函式在程式中都只能定義一次.2021/8/95生存空間和生命週期以及多載化函式extern宣告式讓多個.cpp檔案組成的程式能使用同一個object.寫法:extern資料型別物件名稱;使用extern並不會再額外配置記憶體.可放置於表頭檔中.範例程式:ExternDemo.cpp2021/8/96生存空間和生命週期以及多載化函式LocalObjects(區域性物件)AutomaticObjects(自動配置與釋放的襪件)RegisterAutomaticObjects(放在暫存器裡的物件)StaticLocalOb
5、jects(靜態的區域性物件)此三類皆位於LocalScope.2021/8/97生存空間和生命週期以及多載化函式AutomaticObjects-1生命週期從宣告之後一直到scope結束.例如:voidmain(){inta;{intb;}}b的生命週期a的生命週期2021/8/98生存空間和生命週期以及多載化函式AutomaticObjects-2承上頁,所以“}”可以看做內含釋放所有非由new關鍵字建立的object的記憶體的程式碼.以下是危險的做法:int*trouble(){intres;……….return&res;//危險的,因為res的記憶體已經被釋放了.}2021
6、/8/99生存空間和生命週期以及多載化函式RegisterAutomaticObjects對於使用量極重的automaticobjects,可以用關鍵字register修飾他們.常見的候選者為迴圈中的counterfor(registerinti=0;i<10000;i++){…}register是對編譯器的一種請求.此種object會使用機器暫存器(CPU)來儲存資料,如果不能夠,就使用記憶體儲存.2021/8/910生存空間和生命週期以及多載化函式StaticLocalObjects生命週期同globalobject(整個程式期間)object可見度受限於localscope.
7、初值初始化動作僅做第一次.範例程式:LocalObjectDemo.cpp如果宣告時沒有給定初值,則內定初值為0.驗證程式:LocalObjectInit.cpp2021/8/911生存空間和生命週期以及多載化函式動態配置的物件使用指標和new,delete算式.程式不會自動釋放利用new配置的記憶體,程式設計師必須自行用delete釋放.如果delete的運算元為0(NULL)的話,就不會執行釋放記憶體的動作.所以在指標所指的object被刪除之後,把指標設為0是一