函数中static问题。。。。。。

小白一个,下面代码调用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;
}

提问不能上传图片 代码如下图片

 第一个:
 static Monitor2 mm(mo); //静态变量,程序一执行就要分配空间、初始化,而mo是局部变量,还未存在。所以错误。
 第二个
 static Monitor2 mm(&mo_extern); // mo_extern是全局变量,在mm初始化时,mo_extern已经存在,所以没问题。

函数中的静态变量,只是在程序开始分配内存初始化,执行一次,以后该条语句不再执行。

 void main()
{
    Monitor m;
    cout<<"ok1"<<endl;
    f(&m);
    cout<<"ok2"<<endl;
    f(&m);
    cout<<"ok2"<<endl;  
    f(&m);
    cout<<"ok2"<<endl;
}