Dan Flick
Dan Flick

Reputation: 99

Const dynamic_pointer_cast when is needed

It's not clear for me when is needed to use dynamic_pointer_cast or dynamic_cast with const. Please someone explain it to me. I made a const object of type A but as far as I've seen there's no need to use dynamic_pointer_cast with const at downcast, so when would be needed a const downcast ?

#include <iostream>
#include <memory>


struct A {
    int x = 10;
    virtual ~A() = default;
};

struct B :public A {
  int y = 11;  
};


int main()
{
   const std::shared_ptr<A> a = std::make_shared<B>();
   auto b = std::dynamic_pointer_cast<B>(a); //why shouldn't be dynamic_pointer_cast<const B>(a);
   b->y;

    return 0;
}

Thank you.

Upvotes: 1

Views: 615

Answers (1)

HolyBlackCat
HolyBlackCat

Reputation: 96043

Constness of a pointer is unrelated to constness of what it points to.

If a was a pointer to const A:

      std::shared_ptr<const A> a = std::make_shared<const B>();
// or
const std::shared_ptr<const A> a = std::make_shared<const B>();

, then dynamic_pointer_cast<B> wouldn't work, but dynamic_pointer_cast<const B> would work.

Upvotes: 2

Related Questions