Утечка памяти после использования typeinfo::name()

У меня есть программа, в которой, отчасти для информационного протоколирования, я вывожу имена некоторых классов по мере их использования (в частности, я добавляю в журнал запись следующего содержания: Сообщения::CSomeClass переданы на 127.0.0.1). Я делаю это с помощью кода, подобного следующему:

std::string getMessageName(void) const {
    return std::string(typeid(*this).name());
}

И да, пока никто не указал на это, я понимаю, что вывод typeinfo::name зависит от реализации.

Согласно MSDN

Функция-член type_info::name возвращает const char* в нуль-терминированную строку, представляющую человекочитаемое имя типа. Память, на которую указывается, кэшируется и никогда не должна быть непосредственно деаллоцирована.

Однако, когда я выхожу из своей программы в отладчике, любое "новое" использование typeinfo::name() проявляется как утечка памяти. Если я вывожу информацию для двух классов, я получаю две утечки памяти, и так далее. Это намекает на то, что кэшированные данные никогда не освобождаются.

Хотя это и не является серьезной проблемой, это выглядит грязно, и после длительной отладки это может легко скрыть настоящие утечки памяти.

Я осмотрелся и нашел немного полезной информации (один из ответов SO дает интересную информацию о том, как может быть реализована typeinfo), но мне интересно, должна ли эта память обычно освобождаться системой, или есть ли что-то, что я могу сделать, чтобы "не заметить" утечки при отладке.

У меня есть запасной план - написать метод getMessageName самостоятельно и не полагаться на typeinfo::name, но я все равно хотел бы знать, может быть, я что-то упустил.

8
задан Community 23 May 2017 в 12:22
поделиться