Tengo una clase que contiene una lista que contiene boost::shared_ptrs
a objetos de otra clase.Contenedor de shared_ptr pero iterar con punteros sin formato
Las funciones miembro de clase que dan acceso a los elemets en la lista devuelven punteros sin formato. Para mayor coherencia, también me gustaría poder iterar con punteros sin formato en lugar de shared_ptrs. Así que cuando elimine la referencia del iterador de la lista, me gustaría obtener un puntero sin formato, no un shared_ptr
.
Supongo que necesito escribir un iterador personalizado para esto. ¿Es esto correcto? Si es así, ¿puede alguien señalarme en la dirección correcta? Nunca he hecho esto antes.
Tenga en cuenta que 'shared_ptr' actúa como punteros regulares (' * p' y 'p->' ambos hacen Lo correcto). – GManNickG
Puedo estar equivocado, pero proporcionar tanto un puntero sin formato como un puntero inteligente parece ser un problema. Particularmente, si los punteros sin procesar permiten escrituras. ¿Qué tipo de iteradores estás buscando? Si yo fuera tú, probablemente comenzaría con el más simple, como el 'ForwardIterator'. – dirkgently
Sé que 'shared_ptr' tiene el mismo comportamiento con' * p' y 'p->'. Por un tiempo, realmente no me importó la diferencia. Pero es un problema cuando se trata de la interfaz de usuario. Otras funciones en la API toman punteros como argumentos. Entonces, si el usuario obtiene el objeto de un iterador, entonces necesita usar 'it-> get()' para obtener el puntero sin procesar. Supongo que no importa mucho, pero desde el punto de vista del usuario final, no hay ninguna razón por la que el usuario deba siquiera saber que el objeto subyacente está en un 'shared_ptr'. Entonces me gustaría hacer que sea consistente en toda la biblioteca. –