Ваша основная проблема в том, что вы не инициализировали myInterface
.
Если предположить, что myInterfacee
- просто опечатка, то все будет хорошо, и никто из них не вызовет doSometing
:
IMyInterface* myInterface = 0;
if ( myInterface ){ // ! removed
myInterface->doSometing();
}
if ( myInterface != 0 ) { // as before
myInterface->doSometing();
}
if ( myInterface != NULL ){ // as before
myInterface->doSometing();
}
if ( myInterface != ( IMyInterface* )0 ) { // IMyInterface, not myInterface
myInterface->doSometing();
}
Лично я предпочитаю первые два, а не третий, и мне совсем не нравится четвертое, но это вопрос стиля, а не правильности.
Если myInterface установлен или не установлен
все еще входит в каждое утверждение
Я как-то не верю в это, но если это действительно так (вы инициализируете myInterface
и все еще видите, что выполняются оба предложения if (!myInterface)
и if (myInterface != 0)
), то в другом месте что-то очень неправильно в вашей программе. Эти тесты имеют противоположные значения, поэтому единственный способ, которым они оба будут казаться истинными, - это когда происходит нечто неопределенное.