つまり、基本的にコンストラクターは、RAM 内のオブジェクトのスペースへのポインターを取得するために使用されますか? あれは正しいですか?
いいえ、それは単なる結果です
デフォルトのコンストラクターはそのメモリをどのように初期化しますか? ゼロに初期化されますか?」
いいえ: デフォルトのコンストラクターは単なる関数です。それは、あなたが定義したことを実行します。通常、含まれている変数 (オブジェクト メンバー) に適切な値を割り当てるか、独自のコンストラクターを順番に呼び出すことによって、メモリを "初期化" するように設計されています。
これを考えてください:
class point
{
public:
int x,y; //< just two values
point() //< default constructor
{ x=0; y=0; } //< function body assigning values
};
また
class point
{
public:
int x,y; //< just two values
point() //< default constructor
:x(), y() //< member init-list explicitly calling contrutors
{} //< empty body
};
タイプの変数を宣言しない限り、point
何も実行されないことに注意してください。
int main()
{
point p; //< p created and point::point() called using p as *this
p.x=5; //< x member of p changed
return 0; //just exit main (jumps to the closing } )
} //< p destructor called here, using p as *this.
「暗黙のデフォルトコンストラクター」に従って、それが行うことは次のとおりです。
- ベースの暗黙的なデフォルト コンストラクタを呼び出す
- メンバーを暗黙のデフォルト コンストラクターと呼びます。
すべてのクラスベースの型では、デフォルトの ctor を宣言すると、実際には暗黙的な ctor が置き換えられますが、「組み込み型」 (int、char、float など) の場合、デフォルトの明示的なコンストラクターは、実際には値をに設定します。ゼロですが、暗黙的なものは何もしないため、値が初期化されません。(実装では、異なる手法を使用して同じ結果を得ることができます)