Use unique_ptr to automatically handle the lifetime of sample

This commit is contained in:
Graham Pentheny
2025-08-24 17:12:48 -04:00
parent 6374838d93
commit 686f9afd44
3 changed files with 9 additions and 25 deletions
+1 -1
View File
@@ -24,7 +24,7 @@ struct AppData
// Recast data, samples, and test cases
BuildContext buildContext;
InputGeom* inputGeometry = nullptr;
Sample* sample = nullptr;
std::unique_ptr<Sample> sample;
std::unique_ptr<TestCase> testCase {};
// Time
-2
View File
@@ -12,8 +12,6 @@
AppData::~AppData()
{
delete sample;
sample = nullptr;
delete inputGeometry;
inputGeometry = nullptr;
}
+8 -22
View File
@@ -44,14 +44,10 @@
#include <imgui_impl_opengl2.h>
#include <imgui_impl_sdl2.h>
#ifdef WIN32
# define snprintf _snprintf
#endif
struct SampleItem
{
std::string name;
std::function<Sample*()> create;
std::function<std::unique_ptr<Sample>()> 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<Sample_SoloMesh>(); } },
{.name = "Tile Mesh", .create = []() { return std::make_unique<Sample_TileMesh>(); } },
{.name = "Temp Obstacles", .create = []() { return std::make_unique<Sample_TempObstacles>(); }},
};
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;