Java具有默认构造函数,但其运行方式与C ++不同。
在C ++中,默认构造函数在声明对象时被隐式调用,因此不需要显式“new”它。但在Java中,必须显式初始化对象。有特殊原因吗?是否有任何功能请求?
答案 0 :(得分:8)
仅当C ++声明在堆栈上创建对象时。所有Java对象都是基于堆的,因此这不是一个选项。在两种语言中,在创建新对象时都会调用构造函数。
// C++
Obj obj; // stack
Obj* pObj = new Obj; // heap
// Java
Obj obj = new Obj(); // heap (stack not possible)
答案 1 :(得分:2)
从技术上讲,
在C ++中,默认构造函数在声明对象时被隐式调用
不正确,但不完整。如果对象具有用户定义的默认构造函数,则不仅可以声明它。声明点也是定义和初始化。
在Java中,引用可以是null
,而在C ++中它不能。在C ++中只有指针可以是NULL
。所以有不同的语义。
JavaObject o = null; //valid Java
//invalid C++
答案 2 :(得分:0)
Java构造:
MyClass myObject;
与以下C ++等效(-ish):
MyClass *myObject;
不要:
MyClass myObject;
没有Java等同于后者。