小白一個,下面代碼調用f(Monitor*)時i的值增加超過應有的值
而且多次調用和調用一次值不同
若調用f()一切正常,裡面的monitor是全局的
以上三點我都不能理解 還請各位大神指教
錯誤原因:
main函數結束時:m先被釋放、析構,
然後析構靜態的mon,這時輸出的i,已經是個隨機的。
#include<iostream>
using namespace std;
class Monitor
{
int i;
public:
Monitor(){ i=0; cout<<"Monitor 構造:i="<<i<<endl; }
~Monitor(){ cout<<"Monitor 析構:i="<<i<<endl; }
void print()
{ cout<<" "<<i<<endl; }
};
class Monitor2
{
Monitor* mon;
public:
Monitor2(Monitor* a):mon(a)
{
cout<<"Monitor2 constructor ";
mon->print();
}
~Monitor2()
{
cout<<"Monitor2 destructor ";
mon->print();
}
};
void f(Monitor* a)
{
static Monitor2 mon(a);
}
void main()
{
Monitor m;
cout<<"ok1"<<endl;
f(&m);
cout<<"ok2"<<endl;
}