首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个对象多次声明为“新”会产生什么后果?

将一个对象多次声明为“新”会产生什么后果?
EN

Stack Overflow用户
提问于 2015-10-10 20:47:19
回答 3查看 294关注 0票数 3

我正在用C#和XNA制作一个游戏,目标是移动设备,比如安卓和Windows 7、7.1、8。它将使用一个名为“迷你游戏”的对象来确定玩家将要玩的当前游戏(一个迷你游戏设置在农场,另一个设置在城市,等等)。创建小型游戏的代码是这样设置的。

代码语言:javascript
复制
public class Game1 : Microsoft.Xna.Framework.Game
{
    //This is a global variable
    Minigame minigame;

    ...

    //This method loads the minigame when the player chooses one from the main menu
    //It is loaded using an instance of a class that inherits from the Minigame class
    void LoadMinigame(int number)
    {
        if (number == 0)
        {
            minigame = new MinigameOne();
        }
        else if (number == 1)
        {
            minigame = new MinigameTwo();
        }
        else
        {
            minigame = new MinigameThree();
        } 
    }
}

迷你游戏总是使用对象的“新”实例加载,但是当小游戏完成并且玩家选择另一个对象时,永远不会有任何形式的删除。C#是否期望我执行类似于以下的操作,还是一次又一次地使用"new“而不找到删除变量的方法(即下面的代码减去删除命令)对我来说是安全的?

代码语言:javascript
复制
minigame = new MinigameOne();

//Do something with the minigame

delete minigame; //I don't think this command exists in C#, but is there an equivalent?
minigame = new MinigameTwo();

//Do something again

delete minigame;
minigame = new MinigameThree();
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-10 20:55:38

一旦删除了对对象的所有引用,它就有资格进行垃圾收集。通过覆盖minigame中的引用,您将删除对前一个小型游戏对象的引用。只要没有其他对它的引用,垃圾收集器就会吞噬它。

我建议您阅读一下“垃圾收集的基本原理”,以便更好地理解对象是如何到达其生命周期结束的。

票数 5
EN

Stack Overflow用户

发布于 2015-10-10 20:58:02

我不知道XNA的具体情况,但我认为它必须分配一些需要释放的资源,否则您可能会在一段时间后耗尽它们(文件句柄,刷子,什么的)。

虽然.NET垃圾收集器(GC)通常在管理内存方面做得很好,但它不会释放非托管资源(如上面的资源)。

您应该确保您遵循正确的XNA最佳实践(不管它们是什么)。

我认为使用块应该足够处理Game对象,因为Microsoft.Xna.Framework.Game实现了IDisposable。

干杯

票数 1
EN

Stack Overflow用户

发布于 2015-10-10 20:55:21

不,.Net会帮你的。

一旦您创建了新对象并将其分配给小型游戏变量,它就有资格成为垃圾收集器(因为再也没有人引用它了)。过了一段时间,GC将在没有引用的情况下查看堆和删除对象。

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

https://stackoverflow.com/questions/33058828

复制
相关文章

相似问题

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