new と malloc の違い: new はタイプセーフな C 演算子で、指定された型のオブジェクトを作成し、そのオブジェクトへのポインターを返すために使用されます。 malloc は、型なしのメモリ ブロックを割り当て、そのメモリ ブロックへの void* ポインタを返す C 標準ライブラリ関数です。 new はコンストラクターとデストラクターを呼び出しますが、malloc は呼び出しません。 new は C ランタイムによってメモリを管理しますが、malloc は手動で管理する必要があります。
C における new と malloc の違い
C では、new と malloc はすべて、動的メモリ割り当てに使用される関数です。ただし、これらの間にはいくつかの重要な違いがあります。
- 構文と戻り値の型:
-
new は次のとおりです。指定された型の新しいオブジェクトを作成し、そのオブジェクトへのポインターを返す C 演算子。
-
malloc は、指定されたサイズのメモリ ブロックを割り当て、そのメモリ ブロックへの void* ポインタを返す C 標準ライブラリ関数です。
- タイプ セーフ:
-
new は型をチェックするため、タイプ セーフです。メモリを割り当てるときに一致します。たとえば、
int* p = new int;
は整数ポインターを割り当てますが、p = malloc(sizeof(int));
は型チェックを行わずにメモリ ブロックのみを割り当てます。
-
malloc はタイプセーフではなく、メモリを割り当てるだけであり、呼び出し元はオブジェクトのタイプを管理する責任があります。
- #構築と破棄:
- ##new オブジェクトのコンストラクターが最初に呼び出されます。次に、オブジェクトへのポインタを返します。オブジェクトがスコープ外になると、そのデストラクターが自動的に呼び出されます。
- malloc コンストラクターまたはデストラクターを呼び出しません。これらの関数は呼び出し元が手動で管理する必要があります。
- メモリ管理:
- new メモリ管理は C ランタイムによって処理されます。バックグラウンドで内部ヒープを維持し、メモリの割り当てと解放を担当します。
- malloc 手動のメモリ管理が必要です。呼び出し元は、メモリの割り当て、解放、再割り当てを行います。メモリ管理が不適切だと、メモリ リークやセグメンテーション違反が発生する可能性があります。
概要:
- new は、新しいオブジェクトを作成するための C のタイプセーフ演算子です。
- malloc は、型なしの生メモリを割り当てるために使用される C 標準ライブラリ関数です。
動的メモリ割り当ての場合、C プログラムでは通常、- new がより安全で望ましい選択です。
以上がC++のnewとmallocの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。