この構文はどういう意味ですか?
date aaa(2011,7,1);
aaaの代わりに、好きなものを使用できます(たとえばbbb、またはccc)。aaaクラスに属するという新しいオブジェクトを作成したようdateです。しかし、私が知る限りnew、新しいオブジェクトを作成するにはキーワードを使用する必要があります。
この構文はどういう意味ですか?
date aaa(2011,7,1);
aaaの代わりに、好きなものを使用できます(たとえばbbb、またはccc)。aaaクラスに属するという新しいオブジェクトを作成したようdateです。しかし、私が知る限りnew、新しいオブジェクトを作成するにはキーワードを使用する必要があります。
これは、「 3つの整数パラメーター(またはintから暗黙的に構築できるパラメーター)を受け取るコンストラクターを呼び出すことによって呼び出さdataれるインスタンスを作成する」ことを意味します。aaadate
C ++では、オブジェクトを作成するためにキーワードは必要ありません。動的ストレージ内のオブジェクトをインスタンス化し、そのオブジェクトへのポインターを返します。とりわけ、それはあなた(またはどこかで誰か)がいつかオブジェクトを削除する責任を負わなければならないことを意味します。newnew
int x;
intこれが。という名前のオブジェクトを定義していることを理解していると思いますx。使用しましたnewか?コピー初期化を追加した場合はどうでしょうか。
int x = 5;
intこれにより、という名前のオブジェクトが定義さxれ、5に初期化されます。直接初期化でも同じ結果が得られます。
int x(5);
では、どうでしょうか。
data aaa(2011,7,1);
これは、上記の構文とまったく同じです。dataと呼ばれるタイプのオブジェクトを作成していますがaaa、今回はそのコンストラクターに3つの引数を渡します。
これらの定義すべてに共通しているのは、自動保存期間を持つ特定のタイプのオブジェクトを作成することです。これは、オブジェクトがスコープの最後で破棄されることを意味します。
ここで、次の行について考えてみます。
int* p = new int(5);
これにより、2つのオブジェクトが作成されます。1つ目はとint*呼ばれpます。上記int*と同様に、自動保存期間があり、スコープの最後で破棄されます。次に、によって返されたポインタを使用してそのオブジェクトを初期化しますnew int(5)。この新しい式は、動的ストレージ期間intで5に初期化されたオブジェクトを作成します。つまり、スコープの最後で自動的に破棄されるのではなく、dである必要があります。delete
つまり、これらは、異なるストレージ期間を与えるオブジェクトを作成するための2つの異なる方法です。
C ++に似た一部の言語newでは、Javaなどのオブジェクトを作成する必要がある場合があります。ただし、C++ではそうする必要はありません。
C ++では、たとえば実行時に動的にオブジェクトを作成する必要がある場合に、ヒープ上にnew新しいオブジェクトを作成するために使用します。例のような変数を宣言する場合、それが関数内のローカル変数であれば、スタック上に作成されます。これらのオブジェクトは、スコープが存続する限り使用できます。
new演算子はヒープメモリ内のオブジェクトをインスタンス化し、そのオブジェクトはdeleteが呼び出されるまで存在します。この例では、オブジェクトはスタックでインスタンス化され、スコープ内にのみ存在します(次まで})。