C ++の新しいで、mallocとfreeとを削除

  mallocとfree標準ライブラリ関数C ++ / C言語、新しい/ C ++演算子を削除します。彼らは、動的メモリと空きメモリを適用するために使用することができます。オブジェクトの非イントラデータタイプに対して、光maloc /フリー・ダイナミック・オブジェクトの要件を満たすことができません。自動化するには、オブジェクトのコンストラクタが作成され、オブジェクトは自動的に死ぬ前にデストラクタを実行します。malloc /無料のライブラリ関数が演算子ではないので、制御は、コンパイラの範囲内ではないことを実行することができませんコンストラクタのタスクとデストラクタ課さのmalloc /無料を。だから、削除クリーンアップとオペレータを完了できるようにするには、new演算子の動的なメモリ割り当てと初期化を完了するために必要なC ++言語では、メモリの仕事を解放します。

mallocと新しいです:

  malloc関数は、その関数が連続指定されたメモリ領域を開放している、ライブラリ関数C言語です(注意:malloc関数を呼び出すと、開いたスペースを指定する必要があります)メモリ内に、割り当てられたメモリ(voidへのポインタへのポインタを返します。 *、void *型のポインタは、私たちが必要とするタイプ)への強制転換によって変換する必要があります。

// ユースケース
INT * PTR =(int型 *)のmallocはsizeofINT))// 割り当てスペース型INTサイズ
フロート * PTR2 =(フロート *)のmallocはsizeofINT))// 割り当てスペースフロートタイプサイズ

一般的にmallocでは常に成功した連続したメモリ領域を割り当てますが、メモリー不足またはメモリが断片化しすぎと固定サイズの連続空間を開くために十分な時間で、malloc関数の呼び出しが失敗し、この時間のmallocはNULLポインタを返します。 NULL、第1の戻りポインタを防止するために決定されるべきである場合にはmallocを使用するたびには空です。

 

  新しいマニピュレータ(またはキーワード)C ++提供です。どちらもメモリを割り当てるために使用されます。これは、プロセスは3つの段階に分けることができます呼び出します。

    1、メモリを割り当てるオペレーター新しい(リロード機能)を呼び出します

    図2に示すように、そのオブジェクトに割り当てられたメモリのコンストラクタのコールオブジェクト

    ポインタメモリ空間へのポインタを返す3、

  内部メモリ空間の原理は、プロセスが内部new演算子の中にカプセル化された呼び出し、新しいコールのmalloc関数を開いている、新しいmalloc関数を再パッケージング機能のシリーズに基づいていると言うことができることを言及する価値があります。そして、malloc関数が異なる新しい演算子の新しいオープンスペースは、空間内のオブジェクトを作成するオブジェクトのコンストラクタを呼び出した後、最後にオブジェクトを返しますが、malloc関数は、オープンスペースのための唯一の責任があるということで、構築されるオブジェクトについては責任を負いません。そして、新たな割り当て障害が発生した後のスペースはありませんが、NULLポインタ投げ返す  のstd :: bad_alloc例外を。

 

delete与free:

  そして自由の役割と新しいを削除し、上記の逆を削除します。フリー機能だけで割り当てられたメモリへのポインタのポイントを通過し、このメモリは自動的に解放することができます。それが渡された解放する必要はありません、なぜmalloc関数呼び出しスペースと空きスペースを開くに渡す必要がありますか?実際、その理由は、場合スペースのmallocの割り当てだけでなく、空間を割り当て、着信パラメータの大きさに応じてだけでなく、メモリのサイズに関する情報を含むメモリセグメントヘッド及びテールで(一般にクッキーとして知られる)いくつかの追加情報を挿入します。このようなフリー機能は情報のみを読み取る必要がある、我々はその上のメモリサイズ、スコープとを解放するために知っているだろう。

 

  そして、呼び出し元のプロセスと新しい反対を削除し、それがプロセスにも分けることができます呼び出します。

    1、コール・オブジェクトのデストラクタ

    2、呼び出し演算子を削除

  アップ空きメモリ空間の原則に新しい対応を削除も自由に基づいて一連の機能であるパッケージを削除し、削除し、その呼び出しがオペレータ内にカプセル化され、自由に呼び出します。最初のオブジェクトのデストラクタを呼び出して削除してから、コール空き領域根底にあるメモリを解放します。

 

C ++のメモリ管理の知識は非常に徹底した内部原則として、各読み取りは、新たな洞察を読み取ることができ、C ++を解析マクネアの先生を、指定図書やビデオのシリーズを読むことができます。

おすすめ

転載: www.cnblogs.com/LEEYATWAH/p/11577587.html