1. 程式人生 > >C/C++面試題:建構函式與解構函式

C/C++面試題:建構函式與解構函式

建構函式與解構函式的一道小題

下面程式的輸出是什麼?

#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釋放記憶體空間。

這裡寫圖片描述