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

Nat*_*222 1 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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

任何澄清将不胜感激.

Jon*_*ely 6

我认为使用只能使用一个或另一个,具体取决于它是引用类型还是值类型

通常,是的.

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

    m_renderTarget->BeginDraw();
Run Code Online (Sandbox Code Playgroud)

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

    m_renderTarget.Reset();
Run Code Online (Sandbox Code Playgroud)

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

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


归档时间:

查看次数:

151 次

最近记录:

12 年,10 月 前