程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> c++-關於對象指針數組的析構

c++-關於對象指針數組的析構

編輯:編程解疑
關於對象指針數組的析構

如果a是已經定義好的一個類,有如下定義語句:a *p[5],則當類對象數組指針p離開它的作用域時,系統自動調用類a的析構函數0次。
為什麼是0次????

最佳回答:


在C++中編譯器在臨時對象**離開其作用域時**自動調用對象的析構函數。

理解上面這句話就可以很好的解釋你的問題了。
例如在下面這段代碼中

class A{
    int i;
}

void func(){
    A *p[5];  //創建指針數組
    A a;  //局部變量(對象)
    p[0] = &a;  //指針可以指向局部變量
    p[1] = new A;  //也可以不是指向局部變量
    return;  //局部對象被析構
}

 int main(){
    func();
    return 0;
 }

在func函數調用返回,回到main函數時,**局部變量所占的內存空間被釋放,局部對象被析構**。數組p占用的空間被釋放(但是它所指的變量所占空間不會因此被釋放,所指對象也不會被析構,因為**所指對象不一定是局部對象**);對象a是局部對象,因此被析構,所占空間被釋放,但這和數組p沒有任何關系,被析構的原因僅僅因為它是局部變量,然而恰好p中有一個元素指向了它而已。p[1]所指對象是動態分配的,**不是局部對象**,不會被析構。

lenmonhacker
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved