问题描述
- 函数中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函数能不能在其他文件中使用的问题
static函数
C++ static函数 继承问题
解决方案四:
第一个: 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;}
解决方案七:
第一个:
static Monitor2 mm(mo); //静态变量,程序一执行就要分配空间、初始化,而mo是局部变量,还未存在。所以错误。
第二个
static Monitor2 mm(&mo_extern); // mo_extern是全局变量,在mm初始化时,mo_extern已经存在,所以没问题。
时间: 2025-01-19 09:18:28