2010-01-21 5 views
5

В C++ можно использовать typeid оператор, чтобы получить имя любого полиморфного класса:Какова продолжительность жизни памяти, указанная для typeinfo :: name()?

const char* name = typeid(CMyClass).name(); 

Как долго будет строка, на которую указывает возвращенного const char* указатель доступной моей программы?

+2

Он связан с исполняемым изображением. Посмотрите на файл .map. –

ответ

15

Пока класс с rtti существует. Поэтому, если вы имеете дело с одним исполняемым файлом - навсегда. Но для классов в динамической Link Librariy он немного меняется. Потенциально вы можете выгрузить его.

+1

+1 Самый точный ответ, хотя вам нужно исправить это первое предложение, я знаю, что вы пытаетесь сказать, но это просто похоже на тарабарщину –

3

Память, возвращаемая type_info::name(), будет доступна для приложения.

+0

Гарантируется ли это стандартом? Я знаю, что результат 'typeid()' имеет время жизни приложения, но я не могу найти ничего, что помещает всю жизнь в результат 'type_info :: name()'. –

+0

TTBOMK, это с предостережением, данным Dewfy. Однако, поскольку стандарт даже не признает существование динамических библиотек ... – sbi

Смежные вопросы