C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

コンストラクターはいつC++で呼び出されますか?


ここでは、コンストラクターが呼び出されたときを確認します。ここで、コンストラクターはさまざまなタイプです。グローバル、ローカル、静的ローカル、動的。

グローバルオブジェクトの場合、コンストラクタはmain関数に入る前に呼び出されます。

#include <iostream>
using namespace std;
class MyClass {
   public:
      MyClass() {
         cout << "Calling Constructor" << endl;
      }
};
MyClass myObj; //Global object
int main() {
   cout << "Inside Main";
}

出力

Calling Constructor
Inside Main

オブジェクトが非静的である場合、オブジェクトが作成されるポイントに実行が到達すると、コンストラクターが呼び出されます。

#include <iostream>
using namespace std;
class MyClass {
   public:
      MyClass() {
         cout << "Calling Constructor" << endl;
      }
};
int main() {
   cout << "Inside Main\n";
   MyClass myObj; //Local object
   cout << "After creating object";
}

出力

Inside Main
Calling Constructor
After creating object

オブジェクトがローカル静的である場合、初めてそのコンストラクターが呼び出されます。同じ関数が再度使用されても、影響はありません。

#include <iostream>
using namespace std;
class MyClass {
   public:
      MyClass() {
         cout << "Calling Constructor" << endl;
      }
};
void func() {
   static MyClass myObj; //Local static object
}
int main() {
   cout << "Inside Main\n";
   func();
   cout << "After creating object\n";
   func();
   cout << "After second time";
}

出力

Inside Main
Calling Constructor
After creating object
After second time

最後に、動的オブジェクトの場合、オブジェクトがnew演算子を使用して作成されるときに、コンストラクターが呼び出されます。

#include <iostream>
using namespace std;
class MyClass {
   public:
      MyClass() {
         cout << "Calling Constructor" << endl;
      }
};
int main() {
   cout << "Inside Main\n";
   MyClass *ptr;
   cout << "Declaring pointer\n";
   ptr = new MyClass;
   cout << "After creating dynamic object";
}

出力

Inside Main
Declaring pointer
Calling Constructor
After creating dynamic object

  1. C ++でPythonオブジェクトを使用する方法は?

    これは、単純なPythonオブジェクトがラップされて埋め込まれている例です。これには.cを使用していますが、c++にも同様の手順があります- class PyClass(object):     def __init__(self):         self.data = []     def add(self, val):         self.data.append(val)     def __str__(self):    

  2. Pythonオブジェクトはいつガベージコレクションの候補になりますか?

    Pythonオブジェクトまたは変数は、それへのすべての参照がスコープ外になるか、手動で削除されるとすぐにガベージコレクションの対象になります(delx)。ガベージコレクションを行うには、他のどこにもオブジェクトへの参照がないと推定する必要があります。