我刚才想到一个问题
利用HDC 或其子类构造函数在堆区实例了一个对象是可以但是
窗口表面位置是会变的 也就是说如果一直用哪一个堆区DeviceContent对象是不行的
然后我看了一下我的程序有点问题
CDC *pMainDC = new CClientDC(this)
是在OnPaint()函数里每次都执行了这个 是可以和窗口的数据同步但是会有很多堆区对象浪费
什么时候释放呢pMainDC每次在执行WM_PAINT消息的事件处理函数时都会生成一个CDC类实例指针
也就是每次的pMainDC都是“新生”的,如果说在每次这行代码的上面加
delete pMainDC是不行的 不说每次都是不一样的它不说 他还未被定义怎么delete
(1)所以我们可以把它定义成静态局部变量可以吗
哎 我发现一个问题理论上如果函数栈位置固定每次执行一个函数即便说那个变量不是他自己了
上一秒和下一秒的它不是一个它 但:肉身应该是一样的 物理空间应该是一样的
地址应该是一样的
除非! 函数栈会动!好吧问老师吧
而且为什么静态局部变量每次地址也都会变???
全局的变量的会在每次函数运行中查看他的地址时是不变的
那么问题又来了 全局变量和全局静态变量的关系 我查了一下 如下
1.若程序由一个源文件构成时,全局变量与全局静态变量没有区别。
2.若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。
3.具有外部链接的静态,可以在所有源文件里调用,除了本文件,其他文件可以通过extern的方式引用。
简单来说 :全局变量是属于整个程序的,不过由于C C++的缺点 按文件编译 即便如此也要在别的文件声明才可以用
静态全局变量是属于文件的 也就是在另一个文件不起作用访问不到
那么问题来了 静态局部变量理论上所在空间位置和全局变量和全局静态变量一样都在全局/静态变量区 为什么
每次静态局部变量的地址都不一样 其他两个却不变 问老师吧
切回正题
static CDC *pMainDC = new CClientDC(this); //为ClientDC分配好空间后 构造函数里会调用 GetDC() 析构函数调用ReleaseDC()
delete pMainDC;
pMainDC = new CClientDC(this);
我改成了这样理论上没毛病
问问老师有毛病没 但其实更简洁的是这样
CDC* pMainDC = GetDC();
每次用View类的成员函数GetDC()得到的也是实时的