2013-09-25 33 views
5

載體具有這種在每一個類型構造爲什麼allocator在向量中是const?

const allocator_type& alloc = allocator_type() 

的爲什麼是const的?我看不出有什麼用處。我可以看到傳入一個分配器,所以多個向量可以共享同一個池,但是可以從另一些向量中分組。然而,與常量wouldnt這意味着他們只會複製實例數據?複製一個池或者其他任何東西似乎都沒有用處。

爲什麼它是常量?

+3

您始終可以擁有一個只存儲對池的引用(shared_ptr?)的分配器,因此複製沒問題。 –

+1

分配器!=一個池。因此,複製分配器在邏輯上並不意味着複製池。你的論點無效:) – sehe

+0

@sehe:正確的你!這讓我笑了起來 – user2814152

回答

4

實際上,將const引用並在容器中複製它的分配器可以簡化事情。否則,如果僅傳入引用,則必須確保分配器在容器之前未被銷燬。您只需要在其副本之間共享分配器狀態。您只需將泳池放在shared_ptr即可。

+1

@JurajBlaho:恐怕維基百科已經過時了。雖然C++ 98(和C++ 03)用來要求給定類型的分配器的實例等價於同一類型的分配器的任何其他實例,但在C++ 11分配器中*有*值語義(和狀態)。 –

4

分配器應該具有值語義,這意味着向量按值存儲(注意get_allocator()按值返回)。所以構造函數可以很容易地通過const引用獲取分配器,並將其複製。

+0

我很困惑,爲什麼這是downvoted。 – sehe

+0

@sehe我也是。但不幸的是,沒有辦法要求評論。 – Angew

相關問題