{
public:
void vvfunc() {}
};
class Derived : public Base
{
};
int _tmain(int argc, _TCHAR* argv[])
{
Derived* pd = new Derived;
Base* pb = pd;
cout << typeid( pb ).name() << endl; //prints "class Base *"
cout << typeid( pd ).name() << endl; //prints "class Derived *"
try
{
// Base * pp = NULL;
// cout << typeid( *pp ).name() << endl;
cout << typeid( *pb ).name() << endl; //prints "class Derived"
cout << typeid( *pd ).name() << endl; //prints "class Derived"
}
catch (std::__non_rtti_object e)
{
cout << "__non_rtti_object" << endl;
}
catch (std::bad_typeid e)
{
cout << "bad_typeid exception" << endl;
}
delete pd;
return 0;
}
Visual C++ .NET下,如果/GR 未打开,这个程序仍然成功打印.
但如果 public: virtual void vvfunc(), 则 typeid( *pb ), typeid( *pd )的会错误,抛出__non_rtti_object异常。
如果上面注释的两句打开,则会跑出__bad_typeid异常。
__non_rtti_object继承自__bad_typeid.