Jump to content

A Problem On Node class


photo

Recommended Posts

“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: .

Link to comment
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;

}

Link to comment

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:

Link to comment
×
×
  • Create New...