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;
次のC++と同等(-ish)です。
MyClass *myObject;
しないでください:
MyClass myObject;
後者に相当するJavaはありません。