Reputation: 99
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
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