Что быстрее: вызов функции noop или оператор if?
У меня есть указатель функции для deleter, но в большинстве случаев deleter не нужен, только когда я поддерживаю внутреннюю копию чего-то. В настоящее время я делаю это с помощью функции noop deleter:
class MyClass{
public:
// bind object
template<class Type>
void Bind(Type* obj){
Cleanup();
object_ = obj;
}
// bind object with internal copy
template<class Type>
void Bind(Type obj){
Cleanup();
object_ = new Type(obj);
deleter = &Deleter<Type>;
}
private:
template<class Type>
static void Deleter(void* obj_ptr){
Type* obj = static_cast<Type*>(obj_ptr);
delete obj;
}
static void NoopDeleter(void* unused){
}
void Cleanup(){
(*deleter_)(object_);
object_ = 0;
deleter_ = &NoopDeleter;
}
typedef void (*DeleterFunc)(void*);
void* object_;
DeleterFunc deleter_;
};
Теперь очевидным другим выбором было бы установить его в 0
, когда это не нужно, и проверить функцию Cleanup
с помощью if(deleter_ != 0) (*deleter_)(object_)
.
Теперь, во время кодирования, мне просто пришло в голову: "Хм, какая версия будет быстрее?", так что это скорее личный интерес, а не оптимизация. Извините, если вопрос звучит глупо, но он меня достает, и я действительно хочу знать. Спасибо за любые ответы заранее!