#include <iostream>
using namespace std;
class teacher{
private:
int Tnum;
public:
teacher(){
Tnum = 0;
}
teacher(int n){
cout << "creating teacher"<<endl;
Tnum = n;
}
~teacher(){
cout << "destroying teacher" << endl;
}
};
class student: public teacher{
private:
int Snum;
public:
student(){
Snum =0;
}
student(int n){
cout << " creating student"<<endl;
Snum = n;
}
~student(){
cout << "destroying student"<<endl;
teacher t(1);
cout << "teacher created"<<endl;
}
};
int main(){
teacher t(20);
student s(30);
}
3
A
回答
3
你展示了一個編譯的例子。怎麼了?
它的行爲就像在任何其他函數中創建的對象,並且一旦超出範圍就會被銷燬。
從12.4p8我們發現:
執行析構函數的身體和破壞人體內部分配的任何自動對象後[...]
這證實了創建中的對象析構函數的主體是合法的。
但是,要小心!如果這些對象的構造函數拋出異常,它可能會傷害到你,因爲析構函數是非拋出的,遇到異常會導致應用程序終止。
相關問題
- 1. 如果派生類析構函數拋出一個異常,基類析構函數會發生什麼
- 2. 如果從析構函數調用構造函數,會發生什麼情況?
- 3. 如果我在自己的構造函數中實例化一個對象,會發生什麼?
- 4. 當一個函數創建並返回對象時會發生什麼?
- 5. 在Javascript中創建並存儲在函數中的對象會發生什麼?
- 6. 如果在析構函數中創建了一個對象的活動引用?
- 7. 如果我在python中創建一個變量,會發生什麼
- 8. 如果我在OnPaint()函數中使用CClientDC會發生什麼?
- 9. 只創建一個對象,仍然調用析構函數2次。爲什麼?
- 10. 在測試中創建的模型對象會發生什麼?
- 11. Javascript:當我創建一個新實例時,舊對象會發生什麼?
- 12. 如果我從另一個線程調用一個對象成員函數會發生什麼?
- 13. 當兩個類創建對象時會發生什麼?
- 14. 當我在C++析構函數中拋出異常時會發生什麼?
- 15. 如果shared_ptr的構造函數失敗會發生什麼?
- 16. 爲什麼析構函數在被調用時會創建一個bug?
- 17. 如果我們在課堂上有私人構造函數會發生什麼?
- 18. 如果移動一個沒有移動構造函數的對象會發生什麼?
- 19. 如果你實例化一個類沒有構造函數的對象會發生什麼?
- 20. 構造函數鏈會在Java中創建多個對象嗎?
- 21. 如果GTK無法創建新對象,會發生什麼情況?
- 22. 刪除一個沒有虛擬析構函數的多態對象會發生什麼?
- 23. 如果我從構造函數中拋出異常,構造函數中的釋放內存會發生什麼?
- 24. 我釋放一個釋放對象後會發生什麼?
- 25. 這個對象會發生什麼
- 26. 當我們創建多個對象時,靜態塊會發生什麼?
- 27. 在構造函數中創建對象
- 28. 如果用正在運行的pthread刪除一個對象會發生什麼?
- 29. 當你創建一個這樣的對象時會發生什麼?
- 30. 爲什麼在創建對象時調用構造函數?
C++允許你這樣做,但它根本沒有任何意義。你想做什麼? – ConsistentProgrammer
那麼,它可以說是有道理的。例如,您可以創建一個類的實例,將更改寫入數據庫。當然,你有一個問題就是創建一個對象可能會拋出一個異常,並且*析構函數不應該拋出*。 –