C++析构函数何时调用

2024-11-28 23:44:56
推荐回答(5个)
回答(1):

程序第39行,people的构造函数里面有一行
date birthday(1);

建立了一个date类的临时变量。
当函数退出的时候,这个变量也会被撤销,所以执行了date的析构函数

回答(2):

因为你people的构造函数里构造和析构了一个date对象:
people()
{
cout<<"请输入人员编号:";
cin>>number;
cout<<"请输入人员性别:";
cin>>sex;
date birthday(1);
cout<<"请输入人员身份证号:";
cin>>id;
cout<<"对象初始化完成!\n";
};

上面这个birthday是新创建的一个局部对象,构造函数退出的时候就会释放,所以析构函数被调用了
应该改成:
people() : birthday(1)
{
cout<<"请输入人员编号:";
cin>>number;
cout<<"请输入人员性别:";
cin>>sex;

cout<<"请输入人员身份证号:";
cin>>id;
cout<<"对象初始化完成!\n";
}

回答(3):

构造函数是创建的时候也就是new的时候调用,析构是释放也就是delete的时候调用,你new的话应该是调用构造函数 也就是
date()
{};
date(int i)
{
cout<<"请输入出生年月日:";
cin>>year>>month>>day;
};

回答(4):

p1.~point(); 你自己调用了一次,但是没有析构对象
主函数结尾,程序结束前,销毁对象自动调用析构函数,构造了两个对象调用两次
希望能解决您的问题。

回答(5):

  析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
析构函数在类创建出来的对象的生命周期结束的时候将会被调用。