C++ STL之 trait destructor

construct()接受一個指針p,和一個初值value,該函數的用途就是將初值設定到指針所指的空間上。c++ 的placement new 運算子就是用來完成這個任務。

destroy()有兩個版本,第一個版本接受一個指針,準備將該指針所指之物析構掉。這很簡單,直接調用該對象的析構函數即可。第二版本接受first 和last兩個迭代器(所謂迭代器就是泛化的指針),準備將[first,last)範圍內的所有對象析構掉。我們不知道這個範圍有多大,萬一很大,而每個對象的析構函數都無關痛癢(這就是所謂的trivial destructor),那麼一次次調用這些無關痛癢的析構函數,對效率是一種極大的傷害。因此,這裏先利用value_type()獲得迭代器所指對象的型別,再利用_type_traits 判斷改型別的析構函數是否無關痛癢。若是(_true_type),則什麼也不做就結束;若(_false_type),這才以循環的方式巡防整個範圍,並在循環中每經歷一個對象就調用第一個版本的destroy()。

這樣的觀念很好,但是c++本身並不直接支持對“指針所指之物”的型別判斷,也不支持對“對象析構函數是否爲trivial”的判斷。
具體的對上述的value_type()和_type_traits()如何實現,可以參考<<STL源碼剖析>>。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章