C++ cairo上下文指针检查的好处

C++ cairo上下文指针检查的好处,c++,cairo,C++,Cairo,如果我们不检查cairo上下文是否存在会发生什么,如果返回false会发生什么,例如: bool MyClass::on_draw(const Cairo::RefPtr<Cairo::Context>& cr) { if ( !cr) return false; // what realy happens when we return false? // is the function called once again? } // approa

如果我们不检查cairo上下文是否存在会发生什么,如果返回false会发生什么,例如:

bool MyClass::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
{
      if ( !cr) return false;  // what realy happens when we return false?
      // is the function called once again?
}

// approach 2
bool MyClass::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
{
      // do stuff
      return true;  // works just fine without checking so why to check??
}
bool MyClass::on_draw(const Cairo::RefPtr&cr)
{
如果(!cr)返回false;//当我们返回false时会发生什么?
//是否再次调用该函数?
}
//方法2
bool MyClass::on_draw(const Cairo::RefPtr&cr)
{
//做事
return true;//无需检查即可正常工作,为什么要检查??
}
好处是什么?为什么要检查上下文

如果返回false会发生什么?

有关于
虚拟bool Gtk::Widget::on_draw(const::Cairo::RefPtr&cr)
的文档。我想,你是在超越这个或类似的东西。文档中没有提到任何关于返回值的内容,但是声明它是的默认处理程序。以下是该文档中的一段引用:

返回

如果为true,则停止为事件调用其他处理程序。%false将进一步传播事件

如果
cr
没有指向任何东西,那么调用draw事件的进一步处理程序可能就没有意义了。再说一次,所有实际使用
cr
的处理程序都应该检查它,所以我认为没有必要在这里进行检查。如果您有很多处理程序,当它们都不能工作时返回true可能会减少一些开销。我猜停止事件对于控制用户操作上的事件流比绘制事件更有用

只有当
cr
没有指向任何我觉得奇怪的东西时,才返回false。不检查就返回true会阻止其他处理程序,所以这也有点奇怪