簡體   English   中英

為什么std :: allocator <> :: deallocate()有一個未使用的size_type參數?

[英]Why does std::allocator<>::deallocate() have a size_type parameter which is not used?

當使用std::allocatordeallocate函數需要一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM