C/C++面試題:建構函式與解構函式
阿新 • • 發佈:2019-01-04
建構函式與解構函式的一道小題
下面程式的輸出是什麼?
#include<iostream>
using namespace std;
class TestClass{
char x;
public:
TestClass() { cout << 'A'; }
TestClass(char c) { cout << c; }
~TestClass() { cout << 'B'; }
};
int main() {
TestClass p1, *p2; // 只為p1呼叫預設建構函式,p2不呼叫
p2 = new TestClass('X'); // 為p2呼叫建構函式,p2是一個指標,指向一個物件
delete p2; // p2呼叫解構函式
return 0; // p1呼叫解構函式
}
最後輸出:AXBB
這道題有以下幾個考點:
1、建構函式以及建構函式的過載
2、類的宣告會呼叫建構函式,而類指標的宣告不會
3、new一個物件時會呼叫建構函式
繼續做以下改動:
將main函式改為:
int main() {
TestClass *p1 = new TestClass('A');
return 0;
}
則只輸出A,說明沒有呼叫解構函式,只有delete後才會呼叫解構函式。
如果改成下面這個樣子,程式最後輸出AB,說明呼叫了解構函式。
int main() {
TestClass p1;
return 0;
}
4、使用類指標時,需要delete釋放記憶體空間。