c++オブジェクトを作成する3つの方法

1045 ワード

c++オブジェクトを作成するには、次の3つの方法があります.
A a(1);  //     
A b = A(1);  //     
A* c = new A(1);  //     

1つ目と2つ目は区別されません.1つの暗黙的な呼び出し、1つの明示的な呼び出しです.両方はプロセス仮想アドレス空間のスタックにメモリを割り当てます.3つ目はnewを使用して、スタックにメモリを割り当てます.スタック内のメモリの割り当てと解放はシステムによって管理されます.スタック内のメモリの割り当てと解放はプログラマが手動で解放する必要があります.3つ目の方法を採用する場合は、いくつかの問題に注意しなければなりません.
  • newクラスオブジェクトの作成にはポインタ受信が必要であり、1つは初期化され、複数は
  • を使用する.
  • newクラスオブジェクト作成使用完了delete破棄
  • new作成オブジェクトはスタック空間を直接使用するが、局所的にnew定義クラスオブジェクトを使用しない場合はスタック空間
  • を使用する.
  • newオブジェクトポインタは、関数の戻り値、関数パラメータなどの
  • として広く使用する.
  • 頻繁にフィールドマージを呼び出すのはnewに適していません.new申請とメモリの解放のように
  • です.
  • スタックのサイズは、スタックのサイズよりはるかに小さい
  • スタックは機械システムが提供するデータ構造であり、コンピュータは底層でスタックにサポートを提供する:専門のレジスタ格納スタックのアドレスを割り当て、スタックを押し出すには専門の命令が実行され、これはスタックの効率が比較的高いことを決定した.スタックはC/C++関数ライブラリで提供され、そのメカニズムは複雑です.例えば、メモリを割り当てるために、ライブラリ関数は、データ構造/オペレーティングシステムを参照できる特定のアルゴリズムに従って、十分なサイズのスペースがない場合、スタックメモリで使用可能な十分なサイズのスペースを検索します.(メモリの断片化が多すぎるためかもしれませんが)、システム機能を呼び出してプログラムデータセグメントのメモリ領域を増やすことができ、十分なサイズのメモリに分けて返す機会があります.スタックの効率はスタックよりも
  • も低いことは明らかです.