Hi,
class A;
class B;
typedef boost::shared_ptr<A> pSharedPtrA;
typedef boost::shared_ptr<B> pSharedPtrB;
class B {
public:
int memberB;
};
Class A {
public:
pSharedPtrB pMember;
};
Suppose i have one shared pointer of type pSharedPtrA pointing to an object of class A and the member variable pMember pinging to a valid object of class B.
Now if i pass the shared pointer of type pSharedPtrA to a function suppose Test_Func(pSharedPtrA):
void Test_Func(pSharedPtrA pLocalA)
{
pSharedPtrA ptrA = boost::static_pointer_cast<A> (pLocalA)
pSharedPtrB tmpB = boost::static_pointer_cast<B>(ptrA->pMember)
Another_Func(tmpB)
}
Another_Func(pSharedPtrB pLocalB)
{
int x = pLocalB->memberB; //Gives WRONG value
pSharedPtrB ptmp = boost::static_pointer_cast<B> (pLocalB)
x = ptmp ->memberB; //Gives CORRECT Value
}
The problem is when typecast is not used then in function Another_Func(pSharedPtrB pLocalB), pLocalB->memberB is not giving the correct result but after typecast it is giving the correct results.
The inference is that in function Another_Func() data is preserved in the pLocalB but without typecast i am not able to access it.
Though i have not declared any virtual functions in above code but where we are having problem does contain the vritual functions. I dont know if it has any bearing on behavior observed.
I want to know why typecasting is required to get the correct result and why cant i access the members without typecasting.
Thanks and Regards
Deepak