A ver, he creado una clase usuario para gestionar usuarios que tengan un id único, es por esto que en la parte privada de mi clase he hecho la siguiente declaración:
(El tipo cadena es una clase que he creado, que tiene las mismas características que un string).
Esta variable estática se inicializa a parte en un .cpp del siguiente modo:
Código C++:
Ver originalset<Cadena> Usuario::identificadores;
Aquí muestro la función de construcción de usuario:
Código C++:
Ver originalUsuario::Usuario (const Cadena& identificador, const Cadena& nombre, const Cadena& apellidos, const Cadena& direccion, const char* pass) : identificador_(identificador), nombre_( nombre), apellidos_(apellidos), direccion_(direccion), password_(pass) {
IdValido();
}
y aquí la función IdValido() que la idea principal es que ya que, según lei, set::insert devuelve un tipo pair formado por un iterador y un tipo bool, inserto el id nuevo y si existe pues se lanza una excepción y si no existe pues se agrega el nuevo usuario:
Código C++:
Ver originalbool Usuario::IdValido() const throw(Usuario::Id_duplicado) {
pair<set<Cadena>::iterator,bool> i;
i = identificadores.insert(id());
if (i.second == false) {
throw(Id_duplicado(id()));
return false;
} else {
return true;
}
}
Si compilo (compilando con g++ en Linux), obtengo un bad_alloc y según he estado viendo se produce al entrar a la función IdValido(). ¿Alguien me puede decir la razón?