class COnline : public CDialog
{}
class CAutoSRSDlg : public CDialog
{
public:
COnline*pOnlineDlg;
}
void CAutoSRSDlg::OnStartBUTTON1() 
{

if(!pOnlineDlg)                    这行代码怎么解释?
{
pOnlineDlg=new COnline(this);
pOnlineDlg->Create(IDD_Online_DIALOG,this);
};
}

解决方案 »

  1.   

    如果pOnlineDlg为NULL,说明没有创建过
    则取反为真,执行里面的代码,创建它
      

  2.   

    if(!pOnlineDlg)为什么要加“!”
    这不就是pOnlineDlg为空是才执行里面的语句吗?
      

  3.   

    if(!pOnlineDlg) //即if(pOnlineDlg==NULL) //!0=1
      

  4.   

    !pOnlineDlg 理解为一个表达式
    如果 pOnlineDlg 不等于 NULL , 则!pOnlineDlg 就为 FALSE, 就不用给它 new 一块内存
    反之 pOnlineDlg 等于 NULL, 则!pOnlineDlg 就为 TURE, 就需要给它 new 一块内存
    不然的话,后面的调用pOnlineDlg->Create(IDD_Online_DIALOG,this);就是非法的
      

  5.   

    if(!pOnlineDlg)                    这行代码怎么解释? 

    pOnlineDlg=new COnline(this); 
    pOnlineDlg->Create(IDD_Online_DIALOG,this); 
    };pOnlineDlg 应该在构造函数中有个初始化使得 pOnlineDlg == NULL
    if(!pOnlineDlg) 解释是如果pOnlineDlg为空的话,则需要new一个对象,然后create一个窗口。主要的作用是防止重复创建同一个窗口。另外加!的目的是一般情况下NULL==0,所以上面语句相当于if(!0)这种写法不是很好,好的写法是if(NULL != pOnlineDlg)