< Previous by Date Date Index Next by Date >
< Previous in Thread Thread Index Next in Thread >

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