T& operator*(): 返回间接引用,{ return *_ptr; } T* operator->(): { return _ptr; } operator=(): 各种赋值 operator==(), operator!=(), and operator!(): valid(): { return _ptr!=0; } release(): 简单示例: #include <osg/ref_ptr>#include<osg/Referenced>#include<iostream>classMon...
osg::ref_ptr<osg::Geode>geode=newosg::Geode; geode->addDrawable(geom.get()); grp->addChild(geode.get()); } returngrp.release(); } osg::ref_ptr<osg::Node>createSceneGraph() { //osg::ref_ptr<osg::Node> node = new osg::Node; osg::ref_ptr<osg::Node>node=createGeode(); /...
template<class Other> ref_ptr(const ref_ptr<Other>& rp) : _ptr(rp._ptr) {if(_ptr) _ptr->ref();} ref_ptr(observer_ptr<T>& optr) : _ptr(0) {optr.lock(*this);} ~ref_ptr() {if(_ptr) _ptr->unref(); _ptr = 0;} ref_ptr& operator = (const ref_ptr& rp) { assign(...
CookBook中第一个例子就是observer_ptr指针,这个指针和它的名字一样,就是用来观察指针的,可以把它想象成一个观察者,它只观察一个你给他指点的对象,但是不会影响这个对象的创建和销毁,它只是一个旁观者,但是它观察的这个对象要是被销毁了它也会知道并且自己也会被销毁。和osg::ref_ptr不同,osg::ref_ptr是用来...
osg::ref_ptr<osg::Node>aNode(new osg::Node()); group->addChild(aNode.get()); Ø //方法二,也是非常好的方法,有时候不适用,但也十分安全 group->addChild(new osg::Node()); Ø //方法三,非常危险,但是令许多人无故铤而走险的方法 ...
return camera.release(); } osg::ref_ptr<osgText::Font> g_font=osgText::readFontFile("fonts/arial.ttf"); /** 创建文字节点 */ osgText::Text* createText(const osg::Vec3 &pos,const std::string &content,float size){ osg::ref_ptr<osgText::Text> text=new osgText::Text; ...
osg::ref_ptr<osg::TessellationHints> hints = new osg::TessellationHints; //设置精度 hints->setDetailRatio(0.1); osg::ref_ptr<osg::ShapeDrawable> shape = new osg::ShapeDrawable(new osg::Box(osg::Vec3(x,y,z),长,宽,高),hints.get()); ...
osg::ref_ptr<CEGUIDrawable> cd = new CEGUIDrawable(); gnode->addDrawable(cd.get());//Drawable加入到节点中 cd->InitCEGUIScene();//CEGUI初始化 // gp->addChild(gnode); viewer->getCamera()->getGraphicsContext()->releaseContext(); viewer->setSceneData(gp); viewer->addEventHandler(new ...
osg::ref_ptr<MonitoringTarget> target = new MonitoringTarget(i); return target.release(); } release()的作用就是禁止智能指针释放其所指向的内容,且返回一个c++的普通指针. 注意:接这个函数的返回值时必须用新的osg::ref_ptr<>包装一下,这样就可以正常使用了. osg::Referenced osg::Referenced类是osg中...
() ); return sourceTrans.release(); } int main( int argc, char** argv ) { osg::ref_ptr<osg::Node> model = osgDB::readNodeFile( "cessna.osg" ); osg::ref_ptr<osg::Group> root = new osg::Group; root->addChild( model.get() ); osg::Node* light0 = createLightSource( 0,...