Доброго времени суток!
Роюсь в чужом коде и обнаружил интересную пакость:
class BalanceForwardingData : public Entity
{
...
};
class Entity
{
protected:
RecordStatus _recordStatus;
public:
virtual ~Entity() {};
...
void setModified()
{
if (_recordStatus != usInserted)
_recordStatus = usModified;
}
...
virtual Entity* clone()
{
...
return NULL;
}
};
...
bool Writer::writeBalanceForwardingData(BalanceForwardingData* balance)
{
cout << "bool Writer::writeBalanceForwardingData" << endl;
if ( balance != NULL )
{
try
{
string s1 = typeid(*balance).name();
string s2 = typeid(BalanceForwardingData).name();
cout << "balance != NULL and type of *balance=" << s1<<endl;
cout << "type of BalanceForwardingData=" << s2 <<endl;
if ( s1 == s2 )
{
cout << "And these types are equal" << endl;
}
else
{
cout << "And these types are *NOT* equal" << endl;
}
if ( typeid(*balance) != typeid(BalanceForwardingData) )
{
cout << "typeid(*balance) != typeid(BalanceForwardingData)" << endl;
}
else
{
cout << "typeid(*balance) == typeid(BalanceForwardingData)" << endl;
}
}
catch ( bad_typeid & e )
{
cout << "bad_typeid raised! The reason is " << e.what() << endl;
}
}
if (balance != NULL && typeid(*balance) == typeid(BalanceForwardingData))
{
...
// Сюда не заходит
}
Компиллятор GCC 3.3.
Вот что выводит программа:
balance != NULL and type of *balance=N7MaxBill21BalanceForwardingDataE
type of BalanceForwardingData=N7MaxBill21BalanceForwardingDataE
And these types are equal
typeid(*balance) != typeid(BalanceForwardingData)
Чтог бы это значило?
При этом я посмотрел по коду, balance создаётся вызовом new BalanceForwardingData;