程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c++-函數中static問題。。。。。。

c++-函數中static問題。。。。。。

編輯:編程綜合問答
函數中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;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved