C++の場合、以下のようにオブジェクトの変数宣言しただけで、オブジェクトが生成されることがあるのに気づいて驚きました。
MyClass obj1;
#include <iostream> using namespace std; class MyClass { public: int data; MyClass() { data = 0; } }; int main() { MyClass obj1; // 初期化してないけど!? cout << "obj1 = " << obj1.data << endl; return 0; }
NullReferenceExceptionじゃないの!?と思いきや、上記のコードは正しく動作します。
ただし、以下のようにコンストラクタが引数必須の場合は、コンパイルエラーになります。
#include <iostream> using namespace std; class MyClass { public: int data; MyClass(int data) { this->data = data; } }; int main() { MyClass obj1; // これはコンパイルエラー cout << "obj1 = " << obj1.data << endl; return 0; }
引数ある時は以下のようにします。
MyClass obj1(10);