Jump to content

A Problem On Node class


photo

Recommended Posts

Posted
“release()” is a pure abstract method in class “Node”.

If a NodePtr points to an instance of a subclass, like the ObjectDynamicMesh class, the calling of release would be invalid.

 

Is there any other method like this?

What can we do to make these methods valid on base class pointers?

This feature is likely to limit the power of OOP program design :mellow: .

Posted
int AppWorldLogic::init()

{

    NodePtr pNode1 = NodeDummy::create()->getNode();

    pNode1->release();

    NodePtr pNode2 = NodeDummy::create()->getNode();

    pNode2->release();

    pNode1->addChild(pNode2); //this line of code will cause problem. Unigine Version:2.3.1

    return 1;

}

Posted

You can use pointers to NodeDummy instead:

 NodeDummyPtr pNode1 = NodeDummy::create();
 pNode1->release();
 NodeDummyPtr pNode2 = NodeDummy::create();
 pNode2->release();
 pNode1->addChild(pNode2->getNode());

Or create your own create method:

NodePtr myCreate()
{
 NodeDummyPtr nodeDummy = NodeDummy::create();
 nodeDummy->release();
 NodePtr node = nodeDummy->getNode();
 node->grab();
 return node;
}
//
NodePtr pNode1 = myCreate();
pNode1->release();
NodePtr pNode2 = myCreate();
pNode2->release();
pNode1->addChild(pNode2);

grab() and realse() are basically manual memory management.

 

Thanks!

How to submit a good bug report
---
FTP server for test scenes and user uploads:

×
×
  • Create New...