如何正确使用dispose()?

时间:2015-10-25 01:43:46

标签: java libgdx destructor dispose

例如,如果我有一个实现Disposable的对象实例,那就说它是

BitmapFont someFont = new BitmapFont();

根据LibGDX文档,我应该在不再需要该对象时立即调用dispose()方法。但是如果决定将新字体分配给同一个变量呢:

someFont = new BitmapFont();

为了防止内存泄漏,我应该先在这样的分配之前调用dispose()吗?换句话说,哪个变体是正确的,这个

    BitmapFont someFont = new BitmapFont();
    //do something
    someFont.dispose();
    someFont = new BitmapFont();
    //do something else
    someFont.dispose();

或者这个:

    BitmapFont someFont = new BitmapFont();
    //do something
    someFont = new BitmapFont();
    //do something else
    someFont.dispose();

我目前认为第一个是正确的,并且它表明dispose()的行为就像C ++中的析构函数一样,除了它不是自动调用的事实。

那么,哪个版本实际上是正确的?

2 个答案:

答案 0 :(得分:3)

您的变量只是指向给定对象的指针,而不是包含它所包含的所有引用的总体容器。如果您要关注第二个代码示例,则只在第二个BitmapFont实例上调用dispose,而不是第一个。您的第一个模式在技术上是正确的,并且您还需要考虑try / finally块以确保在完成后调用dispose。

答案 1 :(得分:-2)

使用第二个示例,第一个示例也是正确的,但是对第一个dispose()的调用是多余的,因为您再次使用相同的指针。 祝你好运:)

更新:

抱歉!我检查了我错了:/你需要调用第一个 dispose()函数以避免内存泄漏所以正确的例子是第一个