電子書籍の厳選無料作品が豊富!

終了時にdelete等で領域開放しなくても
リソースの減少か何か
不都合が起きないのでしょうか?
必ずメモリ領域の開放をしなければ支障があるのでしょうか?

A 回答 (5件)

 正常終了した場合は自動的に開放されます。


 ですが、だからってパカパカ使ってれば当然システムを圧迫しますし、開放を司るプログラムが重くなります。
 なので、できれば new したものは delete した方がいいでしょう。
 プログラムの信頼性は、そういう地道な作業によって作り上げていくものです。
    • good
    • 0
この回答へのお礼

ありがとうございます
javaのように簡単にしてほしいものですね

お礼日時:2004/09/07 12:04

#2,#3へのお礼を見ていると、


「newしたものをdeleteしなくても、正常終了させればいいや」
という結論になりそうなので一言。

プロ(他人に自分の作ったソフト/ソースファイルを使っていただく人間)を目指すならば、newしたものは必ずdeleteしましょう。

ソースを見られたとき、ちゃんとdeleteしていないところから、あなたの仕事の信頼性が疑われます。

また、#2の
>OSがまともにメモリ管理をしていてくれていたらアプリ終了時にちゃんと解放されます。
という意見も、ちゃんと保障されているわけではありません。Windowsはもちろん、UNIX/Linuxでも終了時に開放されるとは100%言い切れないのです。

また、サーバー関係のプログラムは一度動かしたら24時間動き続けるものもあります。その様なプログラムでリソース確保しっぱなしをしたらそのプログラムだけでなくほかのプログラムにも影響を及ぼします。
「サーバープログラミングのときは注意するよ」というかもしれませんが、「newしたらdelete」を習慣にしている人でも時にdeleteを忘れてしまうことがあります。習慣にしていない人間ならば確実にその危険性は増えます。

繰り返しになりますが、自分でnewしたものは必ずdeleteすることを習慣として身に付けましょう。
    • good
    • 0
この回答へのお礼

ありがとうございます
newしたものを途中で破棄できる場合は破棄しているのですが最後はどうせ終わるのだから利用していたものをすべて破棄する手間を省こうとしたのです

newで確保したポインタをnewするたびにベクタにプッシュしておき最後にベクタにたまっているポインタをすべて取りだし一つづつデリートしていくようにしました

お礼日時:2004/09/07 18:03

 ちなみに、参考までに Java の場合はもっと面倒です。


 アプリ側としては null を入れてやればそれで終わりですが、裏ではガーベージコレクション(通称GC)というプログラムが、必死こいて「もう開放しても構わないメモリ」を探しつづけています。
 小さなプログラムなら大した問題にはなりませんが、メモリを馬鹿食いするようなロジックだと、このGCの動作時にシステムを圧迫します。
 よって、Java はロジックのチューニングによってしか、メモリを管理することができません(裏技とか使えばまた違うんでしょうけど)。

 Cと Java のメモリ管理は、それぞれ一長一短なんです。
    • good
    • 0
この回答へのお礼

ありがとうございます
ひとつ勉強になりました

お礼日時:2004/09/07 13:27

メモリのことだけを考えるのであれば, 「普通の OS」でリークすることはありません. このくらいのメモリ管理は OS のお仕事です. メモリが十分にあるのなら, むしろプログラム中で毎回 delete するより全くしない方が速くなる可能性もあります.



ただし, セマフォなど他のリソースまできちんと OS が面倒をみているかどうかは不明.
    • good
    • 0
この回答へのお礼

ありがとうございます
途中の開放でなく終了時(WM_CLOSE)の開放ですから実行速度の問題は無いと思います
きちんと清算することにメリットが無いのならばしないほうが楽ですね?

お礼日時:2004/09/07 12:09

OSがまともにメモリ管理をしていてくれていたらアプリ終了時にちゃんと解放されます。



ちなみにWindows3.1は確実にリークします。
    • good
    • 0
この回答へのお礼

ありがとうございます
OSを信用すればいいのですね

お礼日時:2004/09/07 12:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!