C++与java在内存分配(主要指新建基本数据类型&对象时)方面的对比
C++ | java | |
---|---|---|
int a; | 是定义,(如果不是声明(如extern修饰))在栈区分配空间,a是野值 | 是定义,直接分配空间,初始化为0,保险起见赋值 |
float *p=new float (3.14159); | 是定义,(如果不是声明(如extern修饰))在堆区分配空间, | 不支持这种语法 |
Student a | 是定义,在栈上分配空间,a是野值,调用a编译不报错 | 是引用,其不指向任何内存空间(或者说指向null,一块特殊的内存空间),调用a编译报错,必须在调用前让引用指向一块具体的空间,jvm一般会把它放到堆区 |
Student a = (*Student)malloc(…) | 是定义,在堆上分配空间,需要手动free | 不支持这种语法 |
Student a = new Student(…); | 是定义,在堆上分配空间,需要手动delete | 是引用,其不指向任何内存空间(或者说指向null,一块特殊的内存空间),调用a编译报错,必须在调用前让引用指向一块具体的空间,jvm一般会把它放到堆区 |
果然,java安全多了