[英]Why does std::allocator<>::deallocate() have a size_type parameter which is not used?
當使用std::allocator
, deallocate
函數需要一個pointer
參數和一個size_type
參數( std::allocator<>::deallocate(std::allocator<>::pointer p, std::allocator<>::size_type)
。但是,size_type沒有使用,也不是可選的。那么它為什么會出現?它真的讓我感到困惑,因為它應該是可選的,甚至不是,因為它沒有在函數中使用。
編輯 :MSVC的allocator deallocate
實現
void deallocate(pointer _Ptr, size_type)
{ // deallocate object at _Ptr, ignore size
::operator delete(_Ptr);
}
即使標准分配器不使用要釋放的內存塊的大小,其他分配器也可能。 因此,參數必須存在,使得使用分配器的所有STL代碼可以以相同的方式使用不同的分配器。
標准分配器不需要size參數,因為它會記住每個已分配塊的大小。 但是,這會給每個分配增加相當多的開銷。
如果分配器的用戶知道每個內存塊有多大(這種情況經常發生),那么可以使用自定義分配器來節省這種開銷,並告訴deallocate
函數關於塊的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.