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

if i create an object in destructor, what will happen?

本文关键字:什么 一个对象 创建 析构函数 如果      更新时间:2023-10-16
#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);
}

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

从 12.4p8 我们发现:

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

这证实了在析构函数的主体中创建对象是合法的。

但是,要小心!如果这些对象的构造函数引发异常,可能会伤害您,因为析构函数不会引发异常,遇到异常将导致应用程序终止。

相关文章: