liu.yan Posted December 28, 2016 Share Posted December 28, 2016 “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
silent Posted December 28, 2016 Share Posted December 28, 2016 liu.yan Could you please describe the use-case? Any sample code? How to submit a good bug report --- FTP server for test scenes and user uploads: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN Link to comment
liu.yan Posted December 28, 2016 Author Share Posted December 28, 2016 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
silent Posted December 28, 2016 Share Posted December 28, 2016 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: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN Link to comment
Recommended Posts