問題CPP00890の解答例と解説


<解答例 1>
F11キーでフルスクリーンモード、Escキーで元に戻ります。

これは問題文にあるコードそのままだよ。

new 演算子を使った場合はヒープメモリ空間にオブジェクトが作成され、new 演算子を使わなかった場合はスタックメモリ空間にオブジェクトが作成されるという仕組みはしっかり理解しておこう。new 演算子を使ってヒープメモリ領域にオブジェクトを作った場合は、必ず delete 演算子を使って削除しよう。そうしないとメモリリークになってしまうよ。メモリリークは、発生しているかどうかはわかりづらいし、発生していることがわかってバグ修正するときも、どこで作成したオブジェクトがメモリリークになっているのかわかりづらいから、修正するのがちょっと大変だよ。Visual Studio などの開発環境を使う場合は、メモリリークのバグ修正を手助けしてくれる機能があるから活用しよう。

C++ は、こういう風にメモリ管理をプログラマが行なう必要があるんだ。その必要をなくしたのが Java だよ。Javaは、ヒープメモリ空間上に作成したオブジェクトは参照カウンタによってオブジェクトを削除してよいタイミングをシステム(Java仮想マシン)が自動的に判断して削除するというガベージコレクタという仕組みがあるから、メモリリークが起こらないよ。だからプログラマは delete 演算子を使ってすべてのオブジェクトを削除しなくても良いんだ。

C++ は、いつもメモリリークしないようにプログラムを書かなければいけないけないけれど、後の問題に出てくる固定長のメモリアロケータなどのように、メモリの使い方を自由にプログラムできるから自由度が高いんだ。より高度な処理を行なおうとすると、C++の方がやりやすい場合があるよ。
 固定長のメモリアロケータ




初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録



ログイン
メールアドレス:

パスワード:



パスワード紛失

新規登録