1.new/deleteオペレータ新しい/オペレーターの削除とのmalloc /無料の関係
新しいおよび削除の使用で、栗の外観を書きます:
int main()
{
int *p0 = new int;
int *p1 = new int(10);
int *p2 = new int[10];
int *p3 = (int *)malloc(sizeof(int)*10);
delete p0;
delete p1;
delete[] p2;
free(p3);
return 0;
}
それらの間の関係を見てください:
基本的なメカニズムの2.newを処理する場合
差分3.new/deleteとのmalloc /無料
1)のmalloc /無料の標準ライブラリ関数は、C / C ++言語、新しい/ delete演算子はC ++であります
mallocとfree標準ライブラリ関数のC ++ / C言語、新しい/ C ++演算子を削除します。非イントラデータのクラスオブジェクトの場合、光maloc /解放することができる動的なオブジェクトの要件を満たしていません。オブジェクトのデストラクタが死ぬ前に、同時に作成されたオブジェクトのコンストラクタを自動化するには、自動的に実行されます。malloc /無料のライブラリ関数が演算子ではないので、コンパイラはコントロールの範囲内ではない、我々は、malloc関数/無料課せられたタスクのコンストラクタとデストラクタを実行することはできません。
2)また、使用状況に異なります。
次のようにmalloc関数のプロトタイプは:
ボイド*のmalloc(size_tのサイズ);
●長さ寸法を適用MALLOCバイト
●malloc関数の戻り値型が無効であるので、mallocの明示的な型キャストへのコール、ボイドが場合、に変換されます。ポインタ型が必要。
●malloc関数自体は、アプリケーションメモリのタイプは、それだけでメモリの総バイト数を気に何を認識する必要はありません。
次のように無料関数のプロトタイプは次のとおりです。
ボイドのない(void *型memblock);
●pがNULLポインタにかかわらず、問題になることはありません何回のPのその後のない動作である場合。
●pがNULLポインタでない場合は、無料のp-連続操作を2回、エラーを実行するためのプログラムが発生します。
よりはるかに簡単な操作新しい関数malloc関数の使用、例えば:
int型P1 =(int型)はmalloc(サイズ);
int型* P2 =新しいint型[サイズ];
●新しい組み込みのsizeof、キャスト、およびセキュリティチェックのタイプ。
●非標的内部データ・タイプについて、同時に新しいオブジェクトは、動的完了初期化を作成します。
オブジェクトが複数のコンストラクタを持っている場合●は、新しい文は多くの形態を取ることができます。
オブジェクトの配列を削除して解放されたときは、シンボル「[]」を失わないように注意してください。例えば
●削除[] P2; //正しい使用
●削除P2; //誤った使用
削除P2に相当する[0]は、別のオブジェクトのサイズ-1を逃しました。
とにかく我々は、基礎となる新しい呼び出しmalloc関数を理解する基本的な通話無料です削除する必要があります。C ++では、私たちは、違いや接続の両方を理解するために使用します。崩壊の外を防ぐために、malloc関数と一定無料でリリースされた新しいと削除特定の使用は、このマッチング手順をリリース。