首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenSceneGraph内存管理

OpenSceneGraph内存管理
EN

Stack Overflow用户
提问于 2015-02-27 05:05:16
回答 1查看 743关注 0票数 1

我最近开始使用OpenSceneGraph。我想知道它是如何处理内存管理的(如果有的话)。例如,我们有几何类。几何学类接受顶点、颜色、纹理坐标的数组,正如您所期望的那样。但是,它期望这些东西作为指向对象的指针:

代码语言:javascript
复制
void Geometry::setVertexArray(Array* array)
{
    if (array && array->getBinding()==osg::Array::BIND_UNDEFINED) array->setBinding(osg::Array::BIND_PER_VERTEX);

    _vertexArray = array;

    dirtyDisplayList();
    dirtyBound();

    if (_useVertexBufferObjects && array) addVertexBufferObjectIfRequired(array);
}

这是来自OpenSceneGraph源代码。如您所见,Array*被传递给该方法,该方法预期将由用户分配。如果是这样的话,谁会删除它?显然不是OSG(这是有意义的),因为我们可以看到,当一个新的数组指针被分配时,它会盲目地覆盖最后一个数组指针。这很好,但是现在用户必须确保他们分配的数组比几何学类的寿命更长。另外,对于每个用户给这个几何图形对象的数组,他们必须保持对这个数组的引用。

这给我们留下了大量荒谬的指针,必须在删除对象之后才能删除。其结果是,我发现这非常麻烦的使用。我是不是漏掉了什么?为什么这个系统是这样设计的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-27 05:29:26

代码语言:javascript
复制
osg::ref_ptr<Array>             _vertexArray;

_vertexArray是在标题中定义的,如下所示。这意味着当它在该方法中分配给数组时,引用计数将增加到1。当引用被移除时,计数将变为0,并将删除该对象。

这意味着,除非还将数组定义为ref_ptr,否则不能依赖几何对象之外的数组数据。这让我很困惑,我想知道为什么他们没有参数是ref_ptr。

我确信这会导致一些模糊的问题,但我想如果您要传递它,则不依赖于非引用指针。这可能是指在您盲目创建对象并立即将其传递给方法的情况下,尽管我希望OSG能够更清楚地说明这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28757903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档