From 686f9afd4433db2e05567c1a766b08600581d209 Mon Sep 17 00:00:00 2001 From: Graham Pentheny Date: Sun, 24 Aug 2025 17:12:48 -0400 Subject: [PATCH] Use unique_ptr to automatically handle the lifetime of sample --- RecastDemo/Include/AppData.h | 2 +- RecastDemo/Source/AppData.cpp | 2 -- RecastDemo/Source/main.cpp | 30 ++++++++---------------------- 3 files changed, 9 insertions(+), 25 deletions(-) diff --git a/RecastDemo/Include/AppData.h b/RecastDemo/Include/AppData.h index 4917b7c8..c3f7e63b 100644 --- a/RecastDemo/Include/AppData.h +++ b/RecastDemo/Include/AppData.h @@ -24,7 +24,7 @@ struct AppData // Recast data, samples, and test cases BuildContext buildContext; InputGeom* inputGeometry = nullptr; - Sample* sample = nullptr; + std::unique_ptr sample; std::unique_ptr testCase {}; // Time diff --git a/RecastDemo/Source/AppData.cpp b/RecastDemo/Source/AppData.cpp index 26fd178a..c5632c33 100644 --- a/RecastDemo/Source/AppData.cpp +++ b/RecastDemo/Source/AppData.cpp @@ -12,8 +12,6 @@ AppData::~AppData() { - delete sample; - sample = nullptr; delete inputGeometry; inputGeometry = nullptr; } diff --git a/RecastDemo/Source/main.cpp b/RecastDemo/Source/main.cpp index 57fb2fcb..9a2acaf4 100644 --- a/RecastDemo/Source/main.cpp +++ b/RecastDemo/Source/main.cpp @@ -44,14 +44,10 @@ #include #include -#ifdef WIN32 -# define snprintf _snprintf -#endif - struct SampleItem { std::string name; - std::function create; + std::function()> create; }; // Constants @@ -61,9 +57,9 @@ constexpr float UPDATE_TIME = 1.0f / 60.0f; // update at 60Hz constexpr float fogColor[4] = {0.32f, 0.31f, 0.30f, 1.0f}; SampleItem g_samples[] = { - {"Solo Mesh", []() { return new Sample_SoloMesh(); } }, - {"Tile Mesh", []() { return new Sample_TileMesh(); } }, - {"Temp Obstacles", []() { return new Sample_TempObstacles(); }}, + {.name = "Solo Mesh", .create = []() { return std::make_unique(); } }, + {.name = "Tile Mesh", .create = []() { return std::make_unique(); } }, + {.name = "Temp Obstacles", .create = []() { return std::make_unique(); }}, }; constexpr int g_nsamples = sizeof(g_samples) / sizeof(SampleItem); @@ -564,7 +560,6 @@ int main(int /*argc*/, char** /*argv*/) if (newSampleSelected) { - delete app.sample; app.sample = g_samples[app.sampleIndex].create(); app.sample->buildContext = &app.buildContext; if (app.inputGeometry) @@ -588,8 +583,7 @@ int main(int /*argc*/, char** /*argv*/) // Destroy the sample if it already had geometry loaded, as we've just deleted it! if (app.sample && app.sample->inputGeometry) { - delete app.sample; - app.sample = nullptr; + app.sample.reset(); } app.showLog = true; @@ -643,22 +637,15 @@ int main(int /*argc*/, char** /*argv*/) } // Create sample - Sample* newSample = nullptr; for (int i = 0; i < g_nsamples; ++i) { if (g_samples[i].name == app.testCase->sampleName) { - newSample = g_samples[i].create(); - if (newSample) - { - app.sampleIndex = i; - } + app.sample = g_samples[i].create(); + app.sampleIndex = i; } } - delete app.sample; - app.sample = newSample; - if (app.sample) { app.sample->buildContext = &app.buildContext; @@ -676,8 +663,7 @@ int main(int /*argc*/, char** /*argv*/) delete app.inputGeometry; app.inputGeometry = nullptr; - delete app.sample; - app.sample = nullptr; + app.sample.reset(); app.showLog = true; app.logScroll = 0;