我得到了一個刪除器的函數指針,但大多數時候,刪除器不會被需要,只有當我維護一個內部副本的東西。目前,我這樣做,有一個空操作,刪除器功能:速度更快: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