столкнулся со странной проблеммой
#define CREATEDESTROY_LOG_ENABLED 1
#include "../common/Logger.hpp"
#include "../common/myStr.hpp"
/* virtual */
BasePlanet::~BasePlanet()
{
#if CREATEDESTROY_LOG_ENABLED == 1
Logger::Instance().Log("___::~BasePlanet("+int2str(GetId())+")");
#endif
}
Logger работает, но стоит мне заккоментировать
//#include "../common/Logger.hpp"
//#include "../common/myStr.hpp"
компилятор не пожалуется что не нашёл класс Logger и функцию int2str() (папку build чистил, не помагает), и код Логера просто не сработает(такое впячатление препроцессор просто выбросил этот кусок кода). интересность сей ситуации в том, что такое поведение выборочно (т.е. для некоторых файлов это справедливо, для некоторых нет).
я день провозился думал почему некоторые деструкторы не вызываются, а оказывается просто не сработала директива #if ... #endif.
это я случайно заметил(так как знаю иерархию деструкторов). но как избежать такого глюка для логирования данных где иерархии нет(например: случился рендомный евент, он должен быть помещён в лог).
может кто сталкивался с подобным?
если кто захочет попробовать у себя, могу выложить код(но он большой).