osg.observer_ptr是OpenSceneGraph中的一个智能指针类,用于管理对象的生命周期和引用计数。
osg.observer_ptr 类似于标准库的 std::weak_ptr,但有着不同的实现方法。osg.observer_ptr 由 osg::Referenced 类派生而来,因此能够管理其指向的对象的引用计数。
osg.observer_ptr 可以访问其指向的对象,也可以在需要时判断指向的对象是否已经被销毁。当指向的对象被销毁时,osg.observer_ptr 会自动失效,不能再被使用,也不会导致内存泄漏。
创建 osg.observer_ptr 的方法与 std::shared_ptr 类似。可以使用构造函数或者 make_observer 工厂函数来创建。
osg::observer_ptr<MyClass> observer1 = new MyClass();
osg::observer_ptr<MyClass> observer2 = osg::make_observer<MyClass>(new MyClass());
osg.observer_ptr 的使用方法和 std::weak_ptr 类似,可以使用 lock() 方法来访问指向的对象。如果指向的对象已经被销毁,则 lock() 方法会返回一个空指针。
osg::observer_ptr<MyClass> observer = new MyClass();
...
osg::ref_ptr<MyClass> ptr = observer.lock();
if (ptr)
{
// do something with ptr
}
else
{
// the object has been destroyed
}
可以使用 operator bool() 方法来判断指向的对象是否存在。如果指向的对象存在,则 operator bool() 方法返回 true,否则返回 false。
osg::observer_ptr<MyClass> observer = new MyClass();
...
if (observer)
{
// the object exists
}
else
{
// the object has been destroyed
}
osg.observer_ptr 提供了 add_callback() 方法,可以注册一个回调函数,当指向的对象被销毁时,回调函数会被调用。
void myCallback(osg::Referenced* object)
{
// the object has been destroyed
}
osg::observer_ptr<MyClass> observer = new MyClass();
observer->add_callback(new osg::DeleteHandler::DeleteCallback(&myCallback));
osg.observer_ptr 是 OpenSceneGraph 中的一个智能指针类,用于管理对象的生命周期和引用计数。osg.observer_ptr 可以访问其指向的对象,也可以在需要时判断指向的对象是否已经被销毁。当指向的对象被销毁时,osg.observer_ptr 会自动失效,不能再被使用,也不会导致内存泄漏。osg.observer_ptr 提供了 add_callback() 方法,可以注册一个回调函数,当指向的对象被销毁时,回调函数会被调用。