提示コードの#define 部ですが二重deleteは良くないので#defineを使って防いでいるのですがこれは正解なのでしょうか?関数で書くと型の問題で汎用性が損なるのでこうしました。 提示コードの下のEntryクラスですが使い方としてif()文を使ってもしnullptrじゃないとき等を使って分岐するとコードが見ずらくなるので使ってみましたが正しいのでしょうか?
cpp
1#include <iostream> 2#include <cassert> 3 4 5//#define NDEBUG 6 7#define SAFE_DELETE(x) if(x != nullptr){ delete x; x = nullptr;} 8int main() 9{ 10 int* a = new int(); 11 12 SAFE_DELETE(a); 13 SAFE_DELETE(a); 14 15 return 0; 16}
cpp
1#include "Entry.hpp" 2#include "Title.hpp" 3#include "Game.hpp" 4#include "GameOver.hpp" 5 6 7 8 9Entry::Entry() 10{ 11 changeScene = Scene::Title; 12 13 title = nullptr; //タイトル 14 game = nullptr; //ゲーム 15 gameOver = nullptr; //ゲームオーバー 16} 17 18void Entry::Loop() 19{ 20 21 //シーン推移 22 if (title != nullptr) 23 { 24 title->Loop(this); 25 } 26 else if (game != nullptr) 27 { 28 game->Loop(this); 29 } 30 else if (gameOver != nullptr) 31 { 32 gameOver->Loop(this); 33 } 34 35 36 37 //シーン削除 38 switch (changeScene) 39 { 40 case Scene::Title: 41 { 42 SAFE_DELETE(game); 43 SAFE_DELETE(gameOver); 44 title = new Title(); 45 }; 46 break; 47 48 case Scene::Game: 49 { 50 SAFE_DELETE(title); 51 game = new Game(); 52 }; 53 break; 54 55 case Scene::GameOver: 56 { 57 SAFE_DELETE(game); 58 gameOver = new GameOver(); 59 }; 60 break; 61 } 62} 63 64 //シーン切り替え 65void Entry::MoveTo(Scene e) 66{ 67 changeScene = e; 68} 69 70 71 72
現在質問文を編集中です。
回答2件
あなたの回答
tips
プレビュー