"更精确的访问权限"如何设置?我只知道成员变量有private,protected,public三种权限.

解决方案 »

  1.   

    好问题,关注。
    this->m_hWnd==this->GetSaftWnd() 没错吧?
      

  2.   

    GetSaftWnd()在返回m_hWnd之前对m_hWnd的有效性进行了一次校验
      

  3.   

    m_hWnd, 作为一个窗口句柄,不仅仅是一个指针!对于所有的句柄Windows有一封自己的运时安全机制,所以不必要在类层次上对其封装。就象我们总是把对象成员属性直接暴露出来,而不在包容类上把它的所有方法再实现一遍一样。再加上m_hWnd访问的频繁,所以根本就不必要把它封装起来。
    MFC中所有的句柄包容类都采用了这个原则;MFC提供GetSafeH..()是为了保证对象级的空指针安全性:
    CWnd *pWnd = null;
    HWND hwnd = pWnd->GetSafeHwnd(); // OK
    hwnd = pWnd->m_hWnd // Error
      

  4.   

    hwnd  =  pWnd->m_hWnd;的使用也是正确的
    有时候非要这样用,例如判断一个窗口是否已经不存在
    如果用pWnd->GetSafeHwnd();在窗口不存在的时候就会报错,这不是我们期待的
    ::IsWindow(pWnd->GetSafeHwnd());
    ::IsWindow(pWnd->m_hWnd);
      

  5.   

    说道了封裝性,我有一个问题:
    以前用ClassWizard为Cwnd声明对象后,对象自动成为public的,如
    public:
    CButton m_btnTest;
    我总是习惯手工把他们修改为private的,因为在this之外根本不会使用它们,我觉得private对象效率比public的高,有没有这回事?
      

  6.   

    public protected private本身和效率无关,他们只在编译的时候给编译器用的