...
In this noncompliant code example, the B *
poly
pointer value owned by a std::shared_ptr
object is cast to the D *
pointer type with dynamic_cast
in an attempt to obtain a std::shared_ptr
of the polymorphic derived type. However, this eventually results in undefined behavior as the same pointer is thereby stored in two different std::shared_ptr
objects. When g()
exits, the pointer stored in derived
is freed by the default deleter. Any further use of poly
results in accessing freed memory. When f()
exits, the same pointer stored in poly
is destroyed, resulting in a double-free vulnerability.
...