這篇文章主要講解了“PHP虛析構函數怎么用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PHP虛析構函數怎么用”吧!
創新互聯長期為1000多家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為江油企業提供專業的成都網站設計、做網站,江油網站改版等技術服務。擁有十載豐富建站經驗和眾多成功案例,為您定制開發。
用一個例子來說明虛析函數的必要性.在程序清單1中,基類A的構造函數動態分配5個字節,其析構函數負責釋放這塊內存.派生類Z的構造函數動態分配5000個字節,其析構函數負責釋放這塊內存.
#include <iostream> using namespace std; class A{ // base class public: A(){ cout<<"A() firing"<<endl; p = new char[5]; // allocate 5 bytes } ~A(){ cout<<"~A() firing"<<endl; delete[] p;// free 5 bytes } private: char *p; }; class Z: public A {//derived class public: Z(){ cout<<"Z() firing"<<endl; q = new char[5000];//allocate 5000 bytes } ~Z(){ cout<<"~Z() firing"<<endl; delete[] q; //free 50000 bytes } private: char *q; }; void f(); int main(){ for(unsigned i =0; i<3; i++) f(); return 0; } void f(){ A *ptr; //pointer to base class ptr = new Z(); // pointer to derived class object delete ptr; //~A() fires but not ~z() }//***** Caution:50000 bytes of inaccessible storage
在main中三次調用f函數:
void f(){ A *ptr; //pointer to base class ptr = new Z(); // pointer to derived class object delete ptr; //~A() fires but not ~z() }//***** Caution:50000 bytes of inaccessible storage
由于類A和Z的構造函數與析構函數輸出了跟蹤信息,程序運行的結果如圖所示:
現在,由于析構函數已經聲明為虛成員函數,當通過ptr來刪除其所指針的對象時,編譯器進行的是運行期綁定.在這里,因為ptr指向一個Z類型的對象,所以~Z()被調用.我們看到隨后~A()也被調用了,這是通過將析構函數定義為虛成員函數,我們就保證了在調用f時不會產生內存遺漏.
感謝各位的閱讀,以上就是“PHP虛析構函數怎么用”的內容了,經過本文的學習后,相信大家對PHP虛析構函數怎么用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!
本文名稱:PHP虛析構函數怎么用
URL地址:http://vcdvsql.cn/article32/pdcjsc.html
成都網站建設公司_創新互聯,為您提供小程序開發、網站設計、全網營銷推廣、品牌網站設計、面包屑導航、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯