-2

これは初心者の質問かもしれませんが、とにかく自問自答しています。

Objectクラスが定義されている場合:

Object *p = new Object();

このコードはポインターpを作成しp、場所にObjectオブジェクトを配置しますか?

4

1 に答える 1

3

これの意味は:

  • 親クラスへのアドレス用の変数を用意して名前を付けるp
  • 親クラスのコンテンツを格納するのに十分なメモリを割り当てます
  • 親クラスのコンストラクターを呼び出す
  • そのメモリのアドレスを variable に格納しますp

編集:コメントに応じて:

クラスを構築する方法はこれだけではありません。もう1つは、クラスを静的に割り当てることです。

Parent p;

このような場合、Parent クラスへのポインターを変数 p に格納するのではなく、クラス全体を格納します。このような場合には:

  • クラスのメモリは、この変数を定義する関数用に予約されたフレーム内のスタックにあります (スタックは、プログラムがメモリにロードされるときに一度だけ割り当てられます)。
  • プログラムが変数の宣言のポイントに到達すると、コンストラクターが自動的に呼び出されます。
  • プログラムがこの変数のスコープを離れると、デストラクタが自動的に呼び出されます
  • スタックは後で再利用されるため、メモリの割り当ては解除されません (少なくとも Parent クラスのインスタンスでは解除されません)。
于 2013-05-15T05:00:08.653 に答える