如何确定是否使用' - >'与 '。'

时间:2013-03-17 01:15:29

标签: c++ windows direct2d

我正在关注D2D示例并在其中,此代码出现了:

    if(!(D2D1_WINDOW_STATE_OCCLUDED & m_renderTarget->CheckWindowState()))
    {
        m_renderTarget->BeginDraw();

        Draw();

        if(m_renderTarget->EndDraw() == D2DERR_RECREATE_TARGET)
        {
            m_renderTarget.Reset();
            Invalidate();
        }
    }

我注意到m_renderTarget使用了 - > (我忘了它叫什么)后来使用了点运算符。出于某种原因,我认为使用只能使用一个或另一个,具体取决于它是引用类型还是值类型。 显然我认为错了,但找不到关于何时使用每个操作员的任何信息(或更多关于每个操作员的目的。)

非常感谢任何澄清。

2 个答案:

答案 0 :(得分:6)

  

我认为使用只能使用其中一种,具体取决于它是引用类型还是值类型

通常,是的。

两者都在代码中的同一个对象上使用的事实表明它是一个“智能指针”,即一个具有重载operator->的对象类型,它允许它像指针一样工作。

    m_renderTarget->BeginDraw();

这使用operator->来访问它指向的对象的成员。 BeginDraw是指向对象的成员函数,而不是m_renderTarget的成员函数。

    m_renderTarget.Reset();

这会访问m_renderTarget本身的成员,而不是它指向的对象。通常,reset()成员用空指针替换指向的对象。

因此,在第一种情况下,->语法对其指向的对象执行某些操作,而在第二种情况下,.语法对对象本身执行某些操作。

答案 1 :(得分:-1)

箭头操作符的作用是指向一个指针(指向一个对象),然后使用'。 '剩余表达的操作员。

相同
    (*m_renderTarget).BeginDraw();

箭头运算符用于避免与此

混淆
    *(m_renderTarget.BeginDraw());

当然可能是灾难性的,并可能导致程序崩溃。

这解释了一个很好的例子here