在C语言中以与对象创建相反的顺序调用析构函数,但我不明白为什么不为对象数组维护它 .
#include <iostream>
using namespace std;
class test {
int nmbr;
static int c;
public:
test(int j)
{
cout<<"constructor is called for object no :"<<j<<endl;
nmbr=j;
};
~test()
{
c++;
cout<<"destructor is called for object no :"<<c<<endl;
};
};
int test::c=0;
int main()
{
test ob[]={test(1),test(2),test(3)};
return 0;
}
上述程序输出
constructor is called for object no :1
constructor is called for object no :2
constructor is called for object no :3
destructor is called for object no :1
destructor is called for object no :2
destructor is called for object no :3
但为什么析构函数不会以相反的顺序调用?
3 回答
它以相反的顺序调用 . 你正在打印变量c . 看看我在这个节目中的评论 - “我在这里改变了” . 您正在打印一个计数变量,您应该打印正在销毁的对象 .
你可以在这里阅读更多:https://isocpp.org/wiki/faq/dtors#order-dtors-for-arrays
他们是,你的测试错误 . 在调用析构函数时,您正在访问自己设置的数字 . 更改析构函数输出以显示类中的实际值,您将自己查看
析构函数以构造函数调用的相反顺序调用 .
您的测试是错误地生成和打印值 .
试试这段代码,你会看到预期的结果 .