循环中的实例化 - 基元和对象

时间:2013-12-05 00:18:35

标签: memory instantiation

为了使这种语言不可知,让我们的伪代码如下:

    for(int i=0;i<=N;i++){
        double d=0;
        userDefinedObject o=new userDefinedObject();    

        //effectively do something useful
        o.destroy();
    }

现在,这可能会在Java / C ++ / Python等之间得到更深入的细节,但是:

1 - 使用原语错误或只是丑陋/过度杀戮(d可以在上面定义,如果需要,在每次迭代中设置为0)。

2 - 对象实际上是错误的吗?现在,我知道Java会处理内存但是对于C ++,让我们假设我们有一个适当的析构函数。

现在 - 这个问题非常简洁 - 这是错误还是仅仅是品味问题?

谢谢。

1 个答案:

答案 0 :(得分:0)

Java Garbage Collector将在没有引用的情况下处理任何内存分配,这意味着如果在每次迭代时实例化,您将分配新内存并丢失对前一个内存的引用。说到这一点,你可以得出结论GC将处理非引用内存,但你还必须考虑内存分配,特别是对象初始化需要时间和过程的事实。所以,如果你在一个小程序上这样做,你可能不会觉得有什么不对。但是,假设你正在使用类似Bitmap的东西,分配将完全拥有你的记忆。

对于这两种情况,我都说这是一个品味问题,但在现实生活中,您应该完全确定需要在循环中进行初始化