I右のそれ
Object* obj = new Object();
はヒープ
はいっぽい上に作成されています。動的メモリストア内に作成され、ヒープであってもなくてもかまいません。私はArduinoを知らないが、おそらくヒープです。 C++標準では、どのような記憶方法が使用されているかにかかわらず、観察可能な動作が同一であることが保証されているため、ほとんどの場合、用語の問題です。同じことがスタックにも適用されます。 C++は、指定された動作をしている限り、自動ストレージに使用するものを気にしません。
バーは、ヒープ上の "obj"(これは私が作成したもの)とまったく同じポインタですか?
はい、誰でもその違いを伝えることが不可能な場合、コンパイラはすべての種類の楽しいゲームをバックグラウンドでプレイすることができます。これは、「そのまま」ルールと呼ばれます。 What exactly is the "as-if" rule?
これが正しければ、私はまた、メモリのクリアランス右用
delete obj;
を呼び出す必要がありますか?
用語niggle(空白は何らかの種類の空白パターンでメモリを上書きすることを意味します。あなたはそれを解放しています)があります。誰かがメモリを退出時にあなたや実行時に戻さなければなりません。通常は、メモリや他のリソースの漏洩を防ぐために行うのが最善です。
あなたは解放されたメモリがあなたの心配であるとは限りません。プロセスが終了した後でもオブジェクトが保持される外部共有リソースを表す場合はどうなりますか? Sucks tioは、何かがロック解除されなかったためにサーバーを再起動する必要があります。 C++の重要な要素の1つはRAII(What is meant by Resource Acquisition is Initialization (RAII)?)で、この問題のイデオロギー的な解決策です。
スマートポインタを使用してプロセスを自動化することもできます。 What is a smart pointer and when should I use one?
他の重要な点:多くの他の言語とは異なり、new
のオブジェクトはありません。ほとんどの場合、単純なObject obj;
が正しい選択になります。obj
が一時記憶域に作成され、ランタイムは範囲外になったときにobj
を破棄します。それを正しく指定すると、決して問題はありません。しかし、正確な範囲が何であるかを決める際に問題があるかもしれません。
これは正しいようです。 – Jiminion
はい、すべてが順番になっているようです(「メモリクリアランス」は本当に私たちが使用する用語ではありません)。あなたがメモリリークを避けるためにあなたが '新しく'必要なものはすべて、ポインタを介してオブジェクトに関数を渡すことは、関数が同じオブジェクトにアクセスすることを意味します。 – UnholySheep
私が理解しているように、C++は「自動」と「動的」メモリを使用し、用語ヒープ/スタックは使用しません。 –