#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);
}
答案 0 :(得分:3)
你展示了一个编译的例子。会发生什么? 它的行为就像在任何其他函数中创建的对象一样,一旦超出范围就会被销毁。
从12.4p8我们发现:
执行析构函数的主体并销毁在主体内分配的任何自动对象[...]
这确认了在析构函数体中创建对象是合法的。
但是,要小心!如果这些对象的构造函数抛出异常,它可能会对你造成伤害,因为析构函数是非抛出的,遇到异常会导致应用程序终止。