1

Java 具有默认构造函数,但其​​功能与 C++ 不同。

在 C++ 中,在声明对象时会隐式调用默认构造函数,因此无需显式“新建”它。但在 Java 中,必须显式初始化对象。有什么特别的原因吗?对此有任何功能要求吗?

4

3 回答 3

8

仅当 C++ 声明在堆栈上创建对象时。所有 Java 对象都是基于堆的,所以这不是一个选项。在这两种语言中,构造函数都会在创建新对象时调用。

// C++
Obj obj;  // stack
Obj* pObj = new Obj;  // heap

// Java
Obj obj = new Obj();  // heap (stack not possible)
于 2012-09-30T19:55:52.450 回答
2

从技术上讲,

在 C++ 中,默认构造函数在声明对象时被隐式调用

不是错误的,而是不完整的。如果一个对象有一个用户定义的默认构造函数,你不能只声明它。声明点也是定义和初始化。

在 Java 中,引用可以是null,而在 C++ 中则不能。只有指针可以NULL在 C++ 中。所以有不同的语义。

JavaObject o = null; //valid Java
                     //invalid C++
于 2012-09-30T19:57:51.433 回答
0

Java 构造:

MyClass myObject;

等效于(-ish)以下 C++:

MyClass *myObject;

不:

MyClass myObject;

没有与后者等效的 Java。

于 2012-09-30T19:58:21.980 回答