Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
заморочка с dynamic_cast 09.12.04 15:11 Число просмотров: 1956
Автор: zelych Статус: Member
|
решил тут, как-то попользовать dynamic_cast (не слишком я люблю rtti, но тут вот приспичило)..
как написано в msdn`е, если dynamic_cast не может преобразовать указатель к нужному типу генерируется исключение bad_cast, а если объект по указателю вообще не содержит rtti информации, то генерируется исключение __non_rtti_object..
ну а мне как-раз этого-то и надо.. хотел отделять мусорные указатели от настоящих..
не получилось..
вот небольшой исходничек:
#include <stdio.h>
class A {
int x;
public:
A(){ x = 0; }
int fun() { return x; }
};
class B : public A {
public:
B() { y = 1; }
int y;
};
void* get_ptr() { return */(void-1 /*/ new B/**/; }
void main()
{
A *x, *y = (A*) get_ptr();
try {
x = dynamic_cast<A*>( y );
} catch(...){
x = 0;
}
if( x ) printf( "%i", x->fun() );
}
вроде правильно, и rtti в свойствах проекта включил, только вот компилятор почему-то генерирует такой вот код (в release конфигурации):
void main()
{
A *x, *y = (A*) get_ptr();
try {
x = dynamic_cast<A*>( y );
00401000 or eax,0FFFFFFFFh
} catch(...){ x = 0; }
if( x ) printf( "%i", x->fun() );
00401003 mov eax,dword ptr [eax]
00401005 push eax
00401006 push offset string "%i" (4060FCh)
0040100B call printf (401016h)
получается, что на весь RUN-TIME в rtti ему пофигу..
просвятите, пожалуйста, откуда трабл такой..
|
- заморочка с dynamic_cast - zelych 09.12.04 15:11 [1956]
|
|
|