2013-09-25 12 views
5

vettore ha questo in ogni tipo di costruttorePerché l'allocatore const è in vettoriale?

const allocator_type& alloc = allocator_type() 

Perché è const? Non riesco a vedere come sarebbe utile. Posso vedere passare un allocatore in modo che più vettori possano condividere lo stesso pool ma essere raggruppati in un altro gruppo di vettori. Tuttavia con const non significherebbe che avrebbero solo copiato i dati di istanza? copiare un pool o qualunque cosa sia non sembra essere utile.

Perché è const?

+3

È sempre possibile avere un allocatore che memorizza solo un riferimento a un pool (shared_ptr?) In modo che la copia sia corretta. –

+1

Un allocatore! = Un pool. Pertanto la copia di un allocatore non implica logicamente la copia di un pool. Il tuo argomento non è valido :) – sehe

+0

@sehe: Correggi! Questo mi ha fatto ridere – user2814152

risposta

4

In realtà, passare l'allocatore come riferimento const e copiarlo all'interno del contenitore semplifica le cose. Altrimenti se fosse passato solo un riferimento, dovresti assicurarti che l'allocatore non venga distrutto prima del contenitore. Hai solo bisogno di condividere lo stato di allocatore tra le sue copie. Puoi farlo semplicemente tenendo la piscina in un shared_ptr.

+1

@JurajBlaho: Wikipedia, temo, non è aggiornato. Mentre C++ 98 (e C++ 03) richiedeva che un'istanza di un allocatore di un determinato tipo fosse equivalente a qualsiasi altra istanza di un allocatore dello stesso tipo, in C++ 11 gli allocatori * hanno valore * semantica (e stato). –

4

Gli allocatori dovrebbero avere una semantica del valore, il che significa che il vettore lo memorizza per valore (notare che get_allocator() restituisce in base al valore). Quindi il costruttore può facilmente prendere l'allocatore per riferimento const e basta copiarlo.

+0

Sono abbastanza confuso perché questo è stato downvoted. – sehe

+0

@sehe Lo sono anch'io. Ma non c'è modo di richiedere un commento, sfortunatamente. – Angew

Problemi correlati