この質問はインタビューで私に尋ねられました:
C ++では、
malloc
を使用してメモリを割り当てdelete
、その割り当てられたメモリを解放するために使用するとどうなりますか?- を使用してメモリを割り当て、を使用
new
して解放するとどうなりfree
ますか?上記のものがコードで使用された場合に直面する問題は何ですか?
私の答えは違いはないということでした。私はそう言ったのは正しかったですか?
この質問はインタビューで私に尋ねられました:
C ++では、
malloc
を使用してメモリを割り当てdelete
、その割り当てられたメモリを解放するために使用するとどうなりますか?- を使用してメモリを割り当て、を使用
new
して解放するとどうなりfree
ますか?上記のものがコードで使用された場合に直面する問題は何ですか?
私の答えは違いはないということでした。私はそう言ったのは正しかったですか?
そうすると、未定義の動作に遭遇します。絶対に試さないでください。new
を介して実装される場合もあれば、を介して実装される場合もmalloc()
ありますが、それらが実際にそのように実装されているという保証はなく、ユーザーは過負荷になり、自分の裁量で実行できます。ヒープの破損に遭遇するリスクがあります。delete
free()
new
delete
それ以外は、呼び出すmalloc()
と生のメモリが取得され(コンストラクタは呼び出されません)、呼び出すとfree()
デストラクタは呼び出されないことを忘れないでください。これは、プログラムの未定義の動作や不適切な機能につながる可能性もあります。
肝心なのは...決してこれをしないでください。
1)未定義の動作ですが、おそらく「機能」します。デストラクタは、おそらく分解されたくないメモリが解放されたときに呼び出されます。
2)未定義の動作ですが、おそらく「機能」します。デストラクタは呼び出されません。
つまり、それが機能し、その保証がない場合は、基本的な組み込みデータ型に必要なものとまったく同じように機能する可能性があります。