LINUX.ORG.RU

История изменений

Исправление DarkEld3r, (текущая версия) :

Что значит «может»?

Это и значит.

struct Base { virtual ~Base() {} };
struct A : Base { virtual ~A() {} };
struct B : Base { virtual ~B() {} };

void main() {
    Base* p = new B();
    auto* pa = dynamic_cast<A*>(p); // pa == nullptr
    auto& ra = dynamic_cast<A&>(*p); // exception
}

Исправление DarkEld3r, :

Что значит «может»?

Это и значит.

struct Base { virtual ~Base() {} };
struct A : Base { virtual ~A() {} };
struct B : Base { virtual ~B() {} };

void main() {
    Base* p = new B();
    auto* pa = dynamic_cast<A*>(p); // a == nullptr
    auto& ra = dynamic_cast<A&>(*p); // exception
}

Исходная версия DarkEld3r, :

Что значит «может»?

Это и значит.

struct Base { virtual ~A() {} };
struct A : Base { virtual ~A() {} };
struct B : Base { virtual ~A() {} };

void main() {
    Base* p = new B();
    auto* pa = dynamic_cast<A*>(p); // a == nullptr
    auto& ra = dynamic_cast<A&>(*p); // exception
}