RE:String y StringBuffer para C++
En C++ puedes investigar a cerca de la sobrecarga de operadores para que puedas implementar el comportamiento de la clase String de java de concatenacion (+). La implementación de tus strings puede basarse en apuntadores o listas ligadas. Para el caso de la clase String necesitarás liberar la memoria del apuntador original y crear uno nuevo, porque los String no se modifican en Java, por ejemplo si quisieras concatenar las cadenas
class String {
char *s; // apuntador que representa la cadena de caracteres
/*operador + sobrecargado, no recuerdo la sintáxis*/ (String string2)
{
nuevacadena = (char*) malloc(sizeof(char) * (string2.length() + strlen(s))); // o utiliza el operador new junto con delete
if (nuevacadena != null) {
nuevacadena = strconcat(s, String2.getPointer());
s = nuevacadena;
free(s):
} else { /* Error*/ }
}
public int length()
{
return strlen(s);
}
private char* getPointer()
{
return s;
}
}
Para el caso de StringBuffer tienes la alternativa de utilizar la función realloc para reasignar un bloque de cadea de mayor o menor tamaño. Recuerda ser muy cuidadoso con los apuntadores utilizando los constructores y destructores adecuadamente. Para el caso del garbage collector no se me ocurre mucho, quizá podrías en lugar de utilizar directamente malloc, realloc y free o los operadoes new y delete implementar tu propia clase de administración de memoria. Con esta clase tu solo asignas la memoria pero no la liberas, pasado cierto tiempo sin uso de una región puedes liberarla. Sobre C en Unix puedes utilizar hilos para hacer esta tarea en forma alterna, en Windows, C++ Builder también implementa el mecanismo, no sé que otras implementaciones de C lo hagan, pero también puedes consultar implementaciones del garbage collector de java en internet o bien informacion al respecto. Espero al menos contribuir con alguna idea.