新プログラミングの館のメニュー画面の作り方(C++編)について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
datto

新プログラミングの館のメニュー画面の作り方(C++編)について

#1

投稿記事 by datto » 13年前

初めて質問させていただきます。
いつもここを参考にさせていただいているのですが、今回メニュ画面の作り方(C++編)のソースコードに疑問があり、投稿しました。
SceneMgr.cppのソースコードでは、newによりmSceneの中身を確保していますが、deleteしているのはSceneMgr::Update()内のif条件文の中だけです。
mSceneを作り直すときはいいのですが、SceneMgr自体が破棄されるプログラム終了時にもdeleteが必要となってくるのでは、と思いました。
プログラム自体はこのままで問題なく動いているようなのですが・・・
自分のC++関する知識がまだ少ないのでよくわからず、より良識のある人の意見を聞きたく思い失礼ながら質問をさせていただきました。どなたでもかまいませんので、ご回答の程よろしくお願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 新プログラミングの館のメニュー画面の作り方(C++編)について

#2

投稿記事 by h2so5 » 13年前

deleteしたほうがコードとしては安全だと思います。

現在のコードでは無くても動作しますが、シーンクラスのデストラクタで何らかの処理(I/Oなど)を実装した場合に問題が起きる可能性はあります。
(そういう処理はデストラクタで実装しないほうが良いとは思いますが。)

ただし、そこまで考えるならdeleteを使わずstd::unique_ptrなどのスマートポインタを使うのがベストでしょうね。

datto

Re: 新プログラミングの館のメニュー画面の作り方(C++編)について

#3

投稿記事 by datto » 13年前

素早い回答を有難うございます。
なるほど、スマートポインタですか。ググッてきました。
確かにこちらを使うのが安全そうです。

いまいちまだよくわかっていないのですが、今のままのコードでも問題が起こらないのはどうしてなのでしょうか?
なんだか非常に初歩的なことを質問しているかもしれませんが、すみません。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 新プログラミングの館のメニュー画面の作り方(C++編)について

#4

投稿記事 by h2so5 » 13年前

datto さんが書きました:いまいちまだよくわかっていないのですが、今のままのコードでも問題が起こらないのはどうしてなのでしょうか?
なんだか非常に初歩的なことを質問しているかもしれませんが、すみません。
newで確保したメモリ領域をdeleteしない場合でもメモリリークが起きるだけで、メモリを食い潰さないかぎりプログラムの動作に支障はありません。

シーン切替時にdeleteしないとメモリの使用量が増えていってしまいますが、プログラム終了時にはdeleteしなくてもプロセスが使用していたヒープ領域はOSによって自動的に解放されるので、メモリリークは起きないということになります。

ただしdeleteしない場合はデストラクタが呼ばれません。
また、長時間連続して動作させるプログラムや頻繁にnewを使用するプログラムではメモリリークが問題になりやすいということになります。

datto

Re: 新プログラミングの館のメニュー画面の作り方(C++編)について

#5

投稿記事 by datto » 13年前

丁寧な説明を有難うございました。
考えてみたらプログラムが終了してるんだから、メモリリークのことは気にする必要ないですよね。
くだらない質問をしてすいません。
スマートポインタ、とっても便利そうです。使っていこうと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る