1、问题:
CDC *pDC=GetDC();
pDC->FillSolidRect();
this->ReleaseDC(pDC); 问:上面释放了DC,是否有必要加一句 pDC=NULL; 否则是否会产生野指针?
2、上面代码,如果改成如下,GetDC()->FillSolidRect();DC是否要释放?如何释放?GetDC()也是一个指针,它如何处理
3、关于指向控件的指针CWnd *pWnd=GetDlgItem(IDC_EDIT1);
pWnd->SetWindowText("");
这个指针用完,是否要赋值为NULL? 否则是否产生野指针?如果直接使用 GetDlgItem(IDC_EDIT1)->SetWindowText(""); 跟上面的代码有何区别?
GetDlgItem(IDC_EDIT1)也是一个指针啊。用完如何处理?
CDC *pDC=GetDC();
pDC->FillSolidRect();
this->ReleaseDC(pDC); 问:上面释放了DC,是否有必要加一句 pDC=NULL; 否则是否会产生野指针?
2、上面代码,如果改成如下,GetDC()->FillSolidRect();DC是否要释放?如何释放?GetDC()也是一个指针,它如何处理
3、关于指向控件的指针CWnd *pWnd=GetDlgItem(IDC_EDIT1);
pWnd->SetWindowText("");
这个指针用完,是否要赋值为NULL? 否则是否产生野指针?如果直接使用 GetDlgItem(IDC_EDIT1)->SetWindowText(""); 跟上面的代码有何区别?
GetDlgItem(IDC_EDIT1)也是一个指针啊。用完如何处理?
1、问题:
CDC *pDC=GetDC();
pDC->FillSolidRect();
this->ReleaseDC(pDC); 问:上面释放了DC,是否有必要加一句 pDC=NULL; 否则是否会产生野指针?
//没有必要,除非你在后面的代码还要用pDC,但是如果你后面还要用到pDC,ReleaseDC就不能写在这里了。
2、上面代码,如果改成如下,GetDC()->FillSolidRect();DC是否要释放?如何释放?GetDC()也是一个指针,它如何处理
//GetDC需要用ReleaseDC来释放,不应该这样使用GetDC。为了ReleaseDC,在GetDC时要把pDC指针保存着(同上1代码)3、关于指向控件的指针CWnd *pWnd=GetDlgItem(IDC_EDIT1);
pWnd->SetWindowText("");
这个指针用完,是否要赋值为NULL? 否则是否产生野指针?
//没有必要,除非你要用pWnd的空与否来做一些判断。如果直接使用 GetDlgItem(IDC_EDIT1)->SetWindowText(""); 跟上面的代码有何区别?
GetDlgItem(IDC_EDIT1)也是一个指针啊。用完如何处理?
//GetDlgItem得到窗口的指针,并没有分配内存(窗口的内存已经存在),这样用是可以的。
2 MFC会生成临时的CDC对象,对应HDC。在CDC对象析构时,会判断是否要ReleaseDC。但这种风格不好。应该自己释放。
3 HWND不需要释放。