Hola a todos.
Estoy haciendo una clase que usa un Log para guardar mensajes. Lo
extraño es que tal como se crea la clase, automaticamente se llama al
destructor. El codigo del main es este:
int main(int argc, const char* argv[]){
//Aqui creo un logger
CGeneralLogger glogger =
CGeneralLogger("Log333.txt",tools::GLog::LOGLEVEL_DEGUG);
// Aqui recojo una instancia del singleton GlobalLogger
tools::GLog::CGlobalLog *gLog;
gLog = tools::GLog::CGlobalLog::getInstance();
gLog->setMinimumLogLevel(tools::GLog::LOGLEVEL_DEGUG);
// Aqui agrego la clase al log para que la llame en processMessage.
gLog->addListener(&glogger);
gLog->addMessage("Inicio del Log", "[GLOBAL]",tools::GLog::LOGLEVEL_DEGUG);
//Aqui se llama a la funcion virtual para escribir los mensajes a los listeners.
gLog->processMessages();
cout << "Hola mundo" << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
El del constructor es este:
CGeneralLogger::CGeneralLogger(std::string fileName,
tools::GLog::LogLevel lvl):m_fileName(fileName), m_level(lvl)
{
m_file = new std::ofstream;
m_file->open(m_fileName.c_str(), std::ios_base::out |std::ios_base::app);
tools::GLog::CGlobalLog *log;
log = tools::GLog::CGlobalLog::getInstance();
}
Y el del destructor es este:
CGeneralLogger::~CGeneralLogger(void)
{
*m_file << "closing file" << std::endl;
m_file->close();
}
Y el codigo en addListener, es este:
void CGlobalLog::addListener( IListener* listener, std::string loggerGroup /*= "[GLOBAL]"*/ )
{
std::pair<t_ListenerVectorMap::iterator,bool> p =
listenerVectorMap.insert(std::pair<std::string,t_ListenerVector*>(loggerGroup,new t_ListenerVector()));
p.first->second->push_back(listener);
}
Mis sospechas son que en algun sitio de las STL que uso en addListener
provocan algun tipo de constructor por defecto que lleva a una llamada al
destructor del objeto. Ademas, una vez se acaba el main, tambien se
llama al destructor. Por otro lado, si declaro el destructor como
virtual se produce una tercera llamada al destructor.
La verdad es que ando bastante perdido. Si me podeis echar una mano os
lo agradeceria muchisimo.