#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. 只创建一个对象,仍然调用析构函数2次。为什么?
- 4. 如果我从另一个线程调用一个对象成员函数会发生什么?
- 5. 当两个类创建对象时会发生什么?
- 6. 当我在C++析构函数中抛出异常时会发生什么?
- 7. 如果shared_ptr的构造函数失败会发生什么?
- 8. 为什么析构函数在被调用时会创建一个bug?
- 9. 如果我们在课堂上有私人构造函数会发生什么?
- 10. 删除一个没有虚拟析构函数的多态对象会发生什么?
- 11. 如果我从构造函数中抛出异常,构造函数中的释放内存会发生什么?
- 12. 我释放一个释放对象后会发生什么?
- 13. 如果用正在运行的pthread删除一个对象会发生什么?
- 14. 为什么在创建对象时调用构造函数?
- 15. 如果我在asp.net中创建线程,会发生什么情况?
- 16. 在构造函数中创建一个对象的指针C++
- 17. 如果我在ReactJS或React Native的类的构造函数中使用setState()函数会发生什么?
- 18. 如果我们创建超过2^31个不同的对象,会发生什么?
- 19. 在构造函数中从已保存的对象中创建一个对象
- 20. 如果函数内引用了一个变量,那么会发生什么
- 21. 如果不调用stop()函数在谷歌Android Analytics(分析),会发生什么?
- 22. 如果我将一个右值赋给一个对象,那么类的指针成员会发生什么?
- 23. 如果我在头文件中调用函数会发生什么?
- 24. 这个析构函数发生了什么? (段错误)
- 25. 如果我们忽略新对象的结果会发生什么?
- 26. 如果我们将递归函数作为内联函数会发生什么?
- 27. 如果srand函数的参数是一个负int,幕后会发生什么?
- 28. 当我在C++中为对象赋值时,会发生什么?
- 29. 当我在Hibernate中合并对象时会发生什么?
- 30. 有一个默认的构造函数创建一个对象
C++允许你这样做,但它根本没有任何意义。你想做什么? – ConsistentProgrammer
那么,它可以说是有道理的。例如,您可以创建一个类的实例,将更改写入数据库。当然,你有一个问题就是创建一个对象可能会抛出一个异常,并且*析构函数不应该抛出*。 –