[aspectc-user] reset tjp->that()?

Panu Bloigu panu.bloigu at mbnet.fi
Fri Dec 8 08:22:06 CET 2006


Hello.

> I'd like to ask, if it is possible to reset the pointer tjp->that() of
> NULL?

Well, AFAIK, no. tjp->that() gives you a pointer to what ever 'this' points
in the join point and you can not go about assigning to 'this'.

> say i have an object pointer, after i use it, i release it, and i wnat to
> set it as NULL with AOP.

To my knowledge there's nothing stopping you from doing that. However,
tjp->that() is not what you want.

> //the C++ code
> ClassA *p = new ClassA();
> p->DoSomething();
> p->Release();
> //now i want to set p=NULL with AOP
>
> //the AOP Code:
> advice call("% ...::Release()"):after(){
>   tjp->that()=NULL;
> }

Here tjp->that() gives you what ever 'this' points to at the join point.
After the weave your code would be in effect the following (the actual code
given to C++ compiler is much more complicated, but this is how it's
semantics are):

ClassA *p = new ClassA();
p->DoSomething();
p->Release();
this=NULL;

This can not work. However, you can get 'p' by doing tjp->that()->p. To my
knowledge there's one requirement for this to work, though. Your 'p' can not
be a function/method local variable. If it is, then I do not know how to
access it from advice code. I hope this helps. What I've written here is
something that I *think* is correct, but I'm still learning AspectC++
myself, so don't be surprised if you get different (presumably, more
correct) answers.

Panu.




More information about the aspectc-user mailing list