Я использую Visual Studio 2003
для компиляции и запуска следующей программы.
Есть 4 операции присваивания, где я ожидаю, что 2 из них будут работать нормально, и 2 из них вызовут исключение. Внутри перегруженного = operator
происходит динамическое приведение, которое ожидает сбой во время неправильного перекрестного преобразования (приведение от Apple
до Orange
или Orange
до Apple
). Но в моем случае все 4 операции не выполняются (исключение Raising). Я запустил тот же код в Visual Studio 2008
, и он работает нормально, как ожидалось. Но переместить весь проект на Visual Studio 2008
сложно. Это проблема Visual Studio 2003
? Если так, есть ли способ исправить это?
Примечание: класс Fruit
доступен только для чтения и не может быть изменен.
class Fruit
{
public:
virtual void operator = ( const Fruit& fruit )
{
}
};
class Apple : public Fruit
{
public:
virtual void operator = ( const Fruit& fruit )
{
Apple& apple = dynamic_cast<Apple&>( fruit );
}
};
class Mango : public Fruit
{
public:
virtual void operator = ( const Fruit& fruit )
{
Mango& mango = dynamic_cast<Mango&>( fruit );
}
};
int main( void )
{
Apple apple;
Mango mango;
Fruit* fruit[] = { &apple, &mango };
*fruit[0] = *fruit[0]; /* Expect to work ok */
*fruit[0] = *fruit[1]; /* Expect an exception */
*fruit[1] = *fruit[0]; /* Expect an exception */
*fruit[1] = *fruit[1]; /* Expect to work ok */
}