考慮下面的代碼析構函數不叫:當異常被拋出
#include <iostream>
using namespace std;
class Test {
static int count;
int id;
public:
Test() {
count++;
id = count;
cout << "Constructing object number " << id << endl;
if(id == 4)
throw 4;
}
~Test() { cout << "Destructing object number " << id << endl; }
};
int Test::count = 0;
int main() {
try {
Test array[5];
} catch(int i) {
cout << "Caught " << i << endl;
}
}
上面的代碼產生以下輸出:
Constructing object number 1
Constructing object number 2
Constructing object number 3
Constructing object number 4
Destructing object number 3
Destructing object number 2
Destructing object number 1
Caught 4
我想析構函數總是被調用時,對象變得超出範圍即使發生異常時也是如此。爲什麼在這種情況下不調用其中的Test
實例的析構函數?
我已經編輯你的問題到更適合堆棧溢出的東西。請按照[問題指南](http://stackoverflow.com/questions/how-to-ask)以備將來參考,否則您的問題可能會被降低/關閉。 – 2012-01-28 06:19:15