如果我在析构函数中创建一个对象,会发生什么?

时间:2016-05-29 09:57:52

标签: c++ destructor

#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);

}

1 个答案:

答案 0 :(得分:3)

你展示了一个编译的例子。会发生什么? 它的行为就像在任何其他函数中创建的对象一样,一旦超出范围就会被销毁。

12.4p8我们发现:

  

执行析构函数的主体并销毁在主体内分配的任何自动对象[...]

这确认了在析构函数体中创建对象是合法的。

但是,要小心!如果这些对象的构造函数抛出异常,它可能会对你造成伤害,因为析构函数是非抛出的,遇到异常会导致应用程序终止。

相关问题