Пусть код как таковой:dynamic_cast неудачу
#include <iostream>
using namespace std;
class dog
{
public:
virtual ~dog()
{
}
};
class yellowdog : public dog
{
int age;
public:
void bark() { cout << "woof." << endl;}
};
int main()
{
dog *pd = new dog();
yellowdog *py = dynamic_cast<yellowdog*>(pd);
py->bark();
cout << "py = " << py << endl;
cout << "pd = " << pd << endl;
}
Выход:
woof.
py = 0x0
pd = 0x7fd4d34000e0
Я понимаю, почему ру = 0. Я знаю, что есть проверка во время выполнения и в этом RUN- проверка времени, есть отказ в преобразовании dog
в yellowdog
, следовательно, значение py = 0.
Мой вопрос: почему py->bark()
все еще может работать. Почему он все еще способен распечатать «woof»?
Приносим извинения за выполненный ранее код. Как проверить сейчас ..
как избежать такого неопределенного поведения? – lakesh
@lakesh _ «как избежать такого неопределенного поведения?» _ Не разыгрывать «nullptr»: P ... –