我正在建立一个系统,我必须多次调用一些命令,具体取决于用户输入,例如
void handle(int MouseInput)
{
switch(MouseInput)
{
case Move:
ActionMove->execute();
// ...
case BtnUp:
ActionBtnUp->execute();
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
然而,由于系统是可参数化的,我并不总是拥有例如actionMove命令对象(有时我在Move上什么都不做).
什么更快:
实现空对象模式,即具有具有execute如此功能的对象
execute() {}
Run Code Online (Sandbox Code Playgroud)或者每次都检查空指针:
if (ActionBtnUp) ActionBtnUp->execute();
Run Code Online (Sandbox Code Playgroud)我要问的是什么是更大的开销,跳转到一个什么都不做的函数的成本(也许编译器很容易优化它)或者每次检查一个空指针?
注意我现在只能测试小规模,看不出任何差异.如果是这种情况,我想知道.
在这种情况下,除非您注意到性能问题,或者您每隔几秒钟就会这样做几千次,否则它可能对性能没有太大影响.做对你最有意义的事情,以及最可实现和最清晰的事情.这样做在维护期间节省的时间可能大于程序花费额外比较的总时间.