我得到了一个删除器的函数指针,但大多数时候,删除器不会被需要,只有当我维护一个内部副本的东西。目前,我这样做,有一个空操作,删除器功能:速度更快:noop函数调用还是语句?
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_)
。
现在编码过程中,我想到“嗯,哪个版本会更快?”,所以它更多的是个人兴趣而不是优化。对不起,如果这个问题听起来有点愚蠢,但它有点虫子我,我真的想知道。提前感谢任何答案!
任何问题“哪个更快”的答案是测量它。有很多变数,很难得出一般结论。特别是在测试这两种可能性时,实际上比在论坛上提问更容易! – 2011-03-22 03:29:49