woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

C/C++, Java: Java的new[]与C++的new[]

public class Test extends JPanel {
   
private static final long serialVersionUID = 4767050156491994899L;


   
public static void main(String[] args) {
        AnimApp[] array =
new AnimApp[3]; // 没有执行构造函数, 在这里只是申请了空间.
        array[0] = new AnimApp(3); // 构造一个对象
    }

}

class AnimApp {
   
public AnimApp(int times) {
        System.out.println("class AnimApp");
    }
}


Java
中的定义一个数组, 然后用new[], 这时并没有执行构造函数, 只是申请了一段内存空间, C++中的allocator<T>.allocate(size)(因为allocator<T>的类型在运行时确定, 所以不是指定空间的字节数, 而是用元素个数, 每个元素的大小allocator中有记录)相似. 然后在构造一个对象的时候, 即如上new AnimApp(3), 才真正的构造对象, allocator<T>.construct(param).

但在C++, new[]操作符(默认的)就会去先申请空间, 接着执行构造函数, 申请了多少个对象的空间, 执行多少次(每个对象一次), 所以想为无无参构造函数的类使用默认的new[]来定义一个数组是不行的, 这点与Java不同, 他是即申请空间, 同时也要构造对象, Java只是申请一段空间, 对于空间中的每个对象, 得自己显示的用new ClassName(param)来构造.

 

posted on 2009-06-21 16:39 肥仔 阅读(269) 评论(0)  编辑 收藏 引用 所属分类: Web-后台


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理