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