Re: [reSIProcate] Another question on KeepAlive
On May 3, 2006, at 02.18, John Draper wrote:
I stopped at the "if keepAlive" - then checked the following variables
message is 0x887ae00
keepAlive = 0x0
Shouldn't the keepAlive be the same pointer as "message", only it's
just dynamic casted?
Is there something I overlooked? Could the compiler be messed up?
Interfaces are sometimes constrained to a set of object that are more
general than required.
This is a C++ understanding issue, not a resiprocate issue.
From:
"The C++ Programming Language" - Bjarne Stroustrup [you already have
this book, I'm sure]
Section 15.4 Run-Time Type Information
[...]
Recovering the "lost" type information [from the general base-class
interface] of an object requires us to somehow ask the object to
reveal its type. Any operation on an object requires us to have a
pointer or reference of a suitable type for the object. Consequently,
the most obvious and useful operation for inspecting the type of of
an object at run time is a type conversion operation that returns a
valid pointer if the object is of the expected type and a null
pointer if it isn't. The dynamic_cast operator does exactly that. [...]
15.4.1 dynamic_cast
[...]
Consider the following:
dynamic_cast<T*>(p)
If 'p' is of type T*, or an accessible base class of T, the result is
exactly as if we had simply assigned p to a T*. [..]
The purpose of dynamic_cast is to deal with the case in which the
correctness of the conversion cannot be determined by the compiler.
Im that case,
dynamic_cast<T*>(p)
looks at the obbject pointed to by p (if any). If that object is of
class T or has a unique base class of type T, then dynamic_cast
returns a pointer of type T* to that object; otherwise 0 is returned.
If the value of p is 0, dynamic_cast<T*>(p) returns 0.
A