#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
那么,它可以说是有道理的。例如,您可以创建一个类的实例,将更改写入数据库。当然,你有一个问题就是创建一个对象可能会抛出一个异常,并且*析构函数不应该抛出*。 –