如果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]所指對象是動態分配的,**不是局部對象**,不會被析構。