为什么显示不出析构函数?

来源:百度知道 编辑:UC知道 时间:2024/05/24 14:58:39
程序正确.照抄书上例题.但是结果却有点不同.显示不出析构函数.例题中注释的那行.应该要在结果中输出..可是其它都对,就是不输出..不知道为什么?
#include<iostream>
#include<string>
using namespace std;
class Student
{public:
Student(int a1,string a2)
{cout<<"构造函数!"<<a1<<endl;num=a1;nam=a2;}
~Student() {cout<<"析构函数!"<<num<<endl;}/**********此为析构函数要输出**************/
void print();
private:
int num;string nam;
}s1(101,"刘德华"),s2(0,"张学友");

void Student::print()
{if(num==0) throw num;
else cout<<num<<" "<<nam<<endl;}

void A()
{s1.print();s2.print();}

int main()
{try {A();}
catch(int a1) {cout<<"num="<<a1<<",错误!"<<endl;}
return 0;}

如果你要使用C++标准库(iostream中的cout即C++标准库的东东),请不要使用低版本的编译器,例如在VC6中,这段程序就不能正确执行,即不能输出析构函数里的语句。
使用VC7(.net里的)就可以正确执行,使用LINUX和UNIX的GCC也没问题。

当然你也可修改析构函数里的cout<<"析构函数!"<<num<<endl;这句话为:
printf("析构函数!%d\n", num);
这样在VC6中就可以输出,因为printf不是C++标准库的,而是C标准库的。