That did it.

Thanks,
-K

On Wed, 25 Apr 2007, Thrall, Bryan wrote:

Keith Parkins wrote on Wednesday, April 25, 2007 1:45 PM:
I am a bit fuzzy on reference pointers and am not certain why the
following is bad although I have a gut feeling as to why.

I have a class Derived which is derived from base class MY_D_REF
which is a descendant of osg::Referenced. Derived is also a direct
decedent of osgGA::GUIEventHandler.

class Derived : public MY_D_REF, public osgGA::GUIEventHandler,
class MY_D_REF : public osg::Referenced

osgGA::GUIEventHandler also is derived from osg::Referenced, so you're
actually inheriting from that class multiple times. Try using virtual
inheritance.


Class MY_D_REF has a callback which uses a this * to pack its callback
data:

        trans->setUserData(this);
        trans->setUpdateCallback(new MyCallback);

//---------------------------------------------------------------
class MyCallback : public osg::NodeCallback {
public:
   virtual void operator()(osg::Node *node, osg::NodeVisitor *nv) {
       osg::ref_ptr<MY_D_REF> wp = dynamic_cast<MY_D_REF*>
(node->getUserData());
        /--- do stuff --/
       traverse(node, nv);
}
When Derived is destroyed at the end of the program, I get an access
violation (xmemory's (windoze) destructor template).

IF Derived is not derived from both classes, everything is okay.

        or

IF I take out the callback, everything is okay.

When I say that everything is okay, I mean the program exits fine. I
understand that everything is not in fact okay.

Is this because of packing my callback with a this pointer and it's
not getting its count decreased? Is that bad mojo? Is there something
special I should be doing to decrease the reference the MY_D_REF
object in its destructor? I have the destructors protected for the
derived classes. Or is this a something that I might run into because
multiple ancestors are derived from osg::Referenced? I was worried
about a possible circular reference, so I took out reference pointers
in the derived classes, but the results were the same.

Thanks,
Keith

HTH,


--
Keith Parkins                    U of R Center for Visual Science
[EMAIL PROTECTED]       Meliora Hall, Room 236
office: (585) 275-3938           lab: (585) 275-2230
_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to