C++はオブジェクトを宣言し、Javaの関連文法と原理と比較する.

1299 ワード

c++のクラスで、クラスのメンバー変数または関数にアクセスするには、2つの方法があります.1つ目は、次のようなオブジェクトを定義します.
Class A ...

  

A aa;

aa.xxx();


もう一つは
Class B ...



B *aa = new B();

aa->xxx();


  
Javaでは、A a=new A()はc++のA aに等しい.  
またc++には、A*a=new A()など、Javaには対応する形式がありません.最も重要なのは、C++のこのような宣言形式のメモリはプログラマーが手動で管理する必要がありますが、Javaにはメモリ回収機制があり、プログラマーが対象のメモリに関心を持つ必要がないためです.
c++のA a;すでにオブジェクトが構築されています.しかしjavaではA a;宣言ですが、まだスペースが割り当てられていません.javaのA a=new A()こそメモリが割り当てられています.
 
c++の中でとても柔軟で、A a;スタックに空間を割り当て、静的です.A*a=new A;スタック(heap)に空間を割り当て、ダイナミックです.スタック上の空間は自動的に回収され、スタック空間はプログラマが手動で回収する必要がある.
静的割り当てメモリはコンパイル時に適しているが、コンパイル時にメモリの消費量を決定することができ、コンパイル時にメモリの需要量を決定できない場合に動的割り当てメモリを使用することができる.しかし、静的割り当てメモリの実行効率は、動的割り当てメモリの実行効率よりも高い.動的メモリの割り当てと解放には追加のオーバーヘッドが必要であるからである.動的メモリ管理レベルはプログラマのレベルに大きく依存し、処理が適切でないとメモリの漏洩を招きやすい.
 
動的、静的メモリ割当ての比較では、静的メモリ割当てに対する動的メモリ割当ての特徴がわかります.
1)予め記憶領域を割り当てる必要がない.
2)割り当てられた空間はプログラムの必要に応じて拡大または縮小することができる.
 
補足: 
A a =new A();     //   

A *a=new A();    //     



//   

A a;

//   

A *a = new A();

//  

A a = new A();    //   Java    ,     C++ Java      


A*a=new A();オブジェクトが宣言されました
a.run();    //   



a->run();    //