Ho una classe che contiene un elenco contenente boost::shared_ptrs
per oggetti di un'altra classe.Contenitore di shared_ptr ma iterazione con puntatori raw
Le funzioni membro della classe che danno accesso agli elemeti nell'elenco restituiscono puntatori non elaborati. Per coerenza mi piacerebbe anche essere in grado di scorrere con puntatori raw invece di shared_ptrs. Quindi, quando denuncio l'elenco iteratore, mi piacerebbe ottenere un puntatore raw, non uno shared_ptr
.
Suppongo di dover scrivere un iteratore personalizzato per questo. È corretto? Se è così, qualcuno può indicarmi la giusta direzione - non l'ho mai fatto prima.
Ricorda che l'azione di 'shared_ptr' come normali puntatori (' * p' e 'p->' entrambi fanno The Right Thing). – GManNickG
Potrei sbagliarmi, ma fornire sia un puntatore raw che un puntatore intelligente sembra come chiedere dei problemi. In particolare, se i puntatori grezzi consentono le scritture. Che tipo di iteratori stai cercando? Se fossi in te, probabilmente inizierei con il più semplice come "ForwardIterator". – dirkgently
So che 'shared_ptr' ha lo stesso comportamento con' * p' e 'p->'. Per un po 'non mi importava davvero la differenza. Ma è un problema quando si tratta dell'interfaccia utente. Altre funzioni nell'API prendono i puntatori come argomenti. Quindi se l'utente ottiene l'oggetto da un iteratore, allora deve usare 'it-> get()' per ottenere il puntatore raw. Suppongo che non importi molto, ma dal punto di vista dell'utente finale, non c'è alcun motivo per cui l'utente dovrebbe anche sapere che l'oggetto sottostante è tenuto da un 'shared_ptr'. Quindi mi piacerebbe renderlo coerente attraverso la biblioteca. –