- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
生存空間和生命週期以及多載化函式
生存空間和生命週期以及多載化函式 生存空間和生命週期以及多載化函式 C++ Primer 第三版中文版 Chap 8.1~8.4 Chap 9 C++中有關宣告(declarations)的問題 宣告動作所導入的符號名稱可以在何處使用? 提示:C++ scope(生存空間) 包括 global scope , local scope , namespace scope. 程式何時可以安全使用object或函式? 提示:object的生命週期 global: 能夠維持生命到整個程式結束為止. local: 只能在程式的部分期間維持生命. 動態配置: 期生命由程式員控制. Local Scope(區域性生存空間) 所謂local scope是程式本文的部分範圍. 位於一個函式區塊之內. 每個函式都表現有各自的local scope. 函式中每一個複合敘述句(或說區塊 , block)也表現有它自己的一個local scope. local block scopes可以巢狀出現. Local Scope範例 int binarySearch(int val,…) { // binarySearch’s scope start… int a; // scope包含binarySearch,while,if. while(…) { // while loop scope start… int b; // scope 包含 while,if. if(…) { // if statement scope start… int c; // scope 包含 if. } // if statement scope end… } // while loop scope end… } //binarySearch’s scope end… 全域物件(Global Objects) 全域函式(Global Functions) 函式如果宣告在於global scope中,便是一個全域函式. 變數如果宣告在於global scope中,便是一個全域物件. 全域物件是整個程式執行期間都存在的一個物體,生命期從程式啟動開始,直到程式結束. 全域物件和non-inline全域函式在程式中都只能定義一次. extern宣告式 讓多個.cpp檔案組成的程式能使用同一個object. 寫法: extern 資料型別 物件名稱; 使用extern並不會再額外配置記憶體. 可放置於表頭檔中. 範例程式: ExternDemo.cpp Local Objects(區域性物件) Automatic Objects(自動配置與釋放的襪件) Register Automatic Objects(放在暫存器裡的物件) Static Local Objects(靜態的區域性物件) 此三類皆位於Local Scope. Automatic Objects -1 生命週期從宣告之後一直到scope結束. 例如: void main() { int a; { int b; } } Automatic Objects -2 承上頁,所以 “ } ”可以看做內含釋放所有非由 new 關鍵字建立的object的記憶體的程式碼. 以下是危險的做法: int* trouble() { int res; ………. return res; //危險的,因為res的記憶體已經被釋放了. } Register Automatic Objects 對於使用量極重的automatic objects,可以用關鍵字register修飾他們. 常見的候選者為迴圈中的counter for( register int i=0;i10000;i++) {…} register是對編譯器的一種請求. 此種object會使用機器暫存器(CPU)來儲存資料,如果不能夠,就使用記憶體儲存. Static Local Objects 生命週期同global object(整個程式期間) object可見度受限於local scope. 初值初始化動作僅做第一次. 範例程式: LocalObjectDemo.cpp 如果宣告時沒有給定初值,則內定初值為0. 驗證程式: LocalObjectInit.cpp 動態配置的物件 使用指標和 new , delete 算式. 程式不會自動釋放利用new配置的記憶體,程式設計師必須自行用delete釋放. 如果 delete 的運算元為0 (NULL)的話,就不會執行釋放記憶體的動作. 所以在指標所指的object被刪除之後,把指標設為0是一個好習慣. 驗證程式: DeleteNullDemo.cp
您可能关注的文档
最近下载
- PLC编程手册.pdf VIP
- 注册环保工程师之注册环保工程师专业基础题库及答案【各地真题】.docx VIP
- 2025春议题式导与学道德与法治七年级下册04-第四单元 生活在法治社会(教用).docx
- 存储架构优化方案.docx VIP
- 中医在抑郁焦虑调理中的思路.pptx VIP
- 住院患者走失应急预案.pptx VIP
- 脾梗死护理个案.pptx VIP
- GB∕T 40685-2021 信息技术服务 数据资产 管理要求.pdf
- 变配电所二此设备应急故障处理—变配电所保护误动和拒动故障查找处理(高铁变电设备检修).pptx
- 部编人教版六年级上册《道德与法治》全册知识点归纳、考点整理,复习必备.docx VIP
文档评论(0)