新/deleteとmalloc/freeにはどんな違いがありますか?
728 ワード
違い:
1. 新/deleteはC++のオペレータ、malloc/freeはC/C++標準ライブラリ関数です.
2. newは2つのステップに分かれています.最初のステップは申請メモリで、2番目のステップは構造関数を呼び出してオブジェクトを初期化します.同様にdeleteを呼び出す場合は、まず構造関数を呼び出してからスタックメモリを回収する必要があります.mallocはパラメータに基づいてメモリのみを割り当て、デフォルトではvoid*へのポインタを返し、freeはmallocが割り当てたメモリを解放します.
3.malloc/freeはnew/deleteのサブセットです.
共通点:
1. いずれもペアで使用する必要があります.ここでのペアで使用すると、new/mallocがdelete/freeに対応するとは理解できませんが、役割ドメイン内でnew/mallocが申請したメモリが有効に解放されなければなりません.そうしないと、メモリが漏洩します.
2. いずれもメモリを申請し、メモリを解放します.
例:
1. 新/deleteはC++のオペレータ、malloc/freeはC/C++標準ライブラリ関数です.
2. newは2つのステップに分かれています.最初のステップは申請メモリで、2番目のステップは構造関数を呼び出してオブジェクトを初期化します.同様にdeleteを呼び出す場合は、まず構造関数を呼び出してからスタックメモリを回収する必要があります.mallocはパラメータに基づいてメモリのみを割り当て、デフォルトではvoid*へのポインタを返し、freeはmallocが割り当てたメモリを解放します.
3.malloc/freeはnew/deleteのサブセットです.
共通点:
1. いずれもペアで使用する必要があります.ここでのペアで使用すると、new/mallocがdelete/freeに対応するとは理解できませんが、役割ドメイン内でnew/mallocが申請したメモリが有効に解放されなければなりません.そうしないと、メモリが漏洩します.
2. いずれもメモリを申請し、メモリを解放します.
例:
//pM sizeof(int)*100
int* pM = (int *)malloc(sizeof(int)*100);
if (pM)
{
free(pM);
pM = NULL;
}
//pN 100 int
int* pN = new int[100];
if (pN)
{
delete []pN;
pN = NULL;
}