Lo de crear tu propia versión de la librería es por aprender o porque no quieres usar la librería oficial?
Si es por lo primero... pase, si no yo desistiría en tu intento.
En cualquier caso. Veo algunas inconsistencias en tu función:
- CCadena& c: Este argumento sobra. Sólo tendría sentido si la función getline fuese estática, que no lo es.
- ¿Por qué getline es un miembro de CCadena?. Si CCadena intenta ser un sustituto de la clase std::string, sus responsabilidades deberían limitarse a la gestión de la cadena. Interactuar con la entrada / salida no debería ser parte de su implementación
- Lo de borrar el puntero interno y volverlo a asignar únicamente tiene sentido si el espacio actualmente reservado es insuficiente. En caso contrario lo mejor es reutilizar la memoria
- Cuando haces una reserva nueva no almacenas en ningún sitio el nuevo tamaño. Deberías guardar ese valor para evitar reservas innecesarias.
Y luego, como comentas, no tiene demasiado sentido que en tu propia versión de
getline acabes llamando a
cin.getline.
Piensa que la librería estándar se apoya directamente en el sistema operativo para, por ejemplo, interactuar con la entrada / salida. Si haces una librería paralela lo suyo sería que ésta se conectase directamente con la API del sistema operativo en vez de hacer uso de la librería estándar... si no estás poniendo un pegote sin mucho sentido sobre la librería estándar.
Un saludo