私はDelphiで作成したプロジェクトを翻訳しようとしています。オブジェクトのように、一般的に宣言することができます:C程度スタックとヒープのC++オブジェクトの寿命
//I have the control of the object and I MUST delete it when it's not needed anymore
male := THuman.Create();
try
// code
finally
male.Free; (get rid of the object)
end;
読書Stroustrup氏の著書++ Iは常に回避策があるので(ショートで)彼の言語はfinally
ブロックを必要としないことを理解しています。オブジェクトが作成され、その後、ブロック{... code ...}
が、私は、オブジェクトの人生をコントロールすることができ
THuman* male = new THuman
を終了したときにスコープ外になるさ
THuman male;
いる:私はクラスを作成したい場合は今、私は2つの方法がありますそして本は最初のアプローチを使用することを示唆してdelete
(たとえボットでそれを破壊しますhは大丈夫ですが)私はDelphiのバックグラウンドから来て、私は2番目のメソッドを使いたいと思います(私はオブジェクトのコントロールを持っています)。
質問があります。私はC++がオブジェクトに対して持っている方法とオンラインで読むことの2つの方法の違いを理解できません。もっと混乱します。メソッド1がスタックにメモリを割り当て、ヒープ上にメソッド2を割り当てると正しいのでしょうか?
メソッド2(私たちはヒープにあります)にオブジェクトに値NULL
を割り当てても、削除を呼び出す必要がありますか?
たとえば、Delphiではヒープ上にのみインスタンスを作成でき、Free
はオブジェクトを削除します(C++ではdelete
など)。
https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization –
[C++オブジェクトのライフサイクルとは何か?](http://stackoverflow.com/questions/17121305/what-is-the- – Borgleader
可能な限りポインタと動的割り当てを避けてください。あなたがそれらをよく理解していないと、問題や奇妙な行動につながるだけです。自動ストレージ( "スタック"のローカル変数)は安全で、現在の(またはネストされた)ブロック内の変数のみが必要な場合にはうまく機能します。現代のC++では、多形性を除いてポインタはまったく必要ありません。 –