C++ にはデストラクタがあり、Java/C# にはガベージ コレクタがあることは知っていますが、メモリ割り当て解除の違いは何ですか?
3 に答える
C++ には確定的な割り当て解除がありますが、Java と C# にはありません。
他のほとんどすべては実装定義です。
C++ では、定期的に発生する C#/Java の自動ガベージ コレクションとは異なり、ヒープ メモリの割り当て解除は手動です。
スマート ポインターを使用すると、C++ でもガベージ コレクションの効果をシミュレートできますが、内部では誰かがdelete()/free()関数を呼び出すコードを作成する必要があります。
C++ は、動的に割り当てられないスタック メモリ上でのオブジェクト作成も提供しますが、メモリ管理も必要ありません。
PL同様に、制御フローが範囲外になったときにメモリの割り当てを自動的に解除する手法でも知られる手法をC#/Javaサポートしています。技術がサポートされている場合、プログラマーはメモリの解放に集中する必要はありません。garbage collectionautomatic memory managementPLgarbage collection
しかし、PL同様に、プログラマーがメモリを制御する場所をC/C++サポートします。new および delete 演算子を使用してメモリを割り当ておよび割り当て解除する方法を提供しますmanual memory managementC++