From 5b910f876120b025eb1bd4f629b6982ea36e2d80 Mon Sep 17 00:00:00 2001 From: Chris Thrasher Date: Sun, 25 Aug 2024 11:18:24 -0600 Subject: [PATCH] Remove all `delete` calls outside of `_destroy` functions --- src/CSFML/Audio/Music.cpp | 32 +++----- src/CSFML/Audio/MusicStruct.hpp | 2 +- src/CSFML/Graphics/Font.cpp | 10 +-- src/CSFML/Graphics/Texture.cpp | 116 +++++++++------------------- src/CSFML/Graphics/VertexBuffer.cpp | 18 ++--- src/CSFML/Network/TcpListener.cpp | 11 +-- 6 files changed, 64 insertions(+), 125 deletions(-) diff --git a/src/CSFML/Audio/Music.cpp b/src/CSFML/Audio/Music.cpp index 69b6f21..3c364d0 100644 --- a/src/CSFML/Audio/Music.cpp +++ b/src/CSFML/Audio/Music.cpp @@ -35,28 +35,22 @@ sfMusic* sfMusic_createFromFile(const char* filename) { assert(filename); - auto* music = new sfMusic; - if (!music->This.openFromFile(filename)) - { - delete music; - music = nullptr; - } + sf::Music music; + if (!music.openFromFile(filename)) + return nullptr; - return music; + return new sfMusic{std::move(music), {}}; } //////////////////////////////////////////////////////////// sfMusic* sfMusic_createFromMemory(const void* data, size_t sizeInBytes) { - auto* music = new sfMusic; - if (!music->This.openFromMemory(data, sizeInBytes)) - { - delete music; - music = nullptr; - } + sf::Music music; + if (!music.openFromMemory(data, sizeInBytes)) + return nullptr; - return music; + return new sfMusic{std::move(music), {}}; } @@ -65,15 +59,11 @@ sfMusic* sfMusic_createFromStream(sfInputStream* stream) { assert(stream); - auto* music = new sfMusic; - music->Stream = CallbackStream(stream); + auto music = std::make_unique(sfMusic{{}, {stream}}); if (!music->This.openFromStream(music->Stream)) - { - delete music; - music = nullptr; - } + return nullptr; - return music; + return music.release(); } diff --git a/src/CSFML/Audio/MusicStruct.hpp b/src/CSFML/Audio/MusicStruct.hpp index 8e64db2..6d33849 100644 --- a/src/CSFML/Audio/MusicStruct.hpp +++ b/src/CSFML/Audio/MusicStruct.hpp @@ -37,6 +37,6 @@ //////////////////////////////////////////////////////////// struct sfMusic { - CallbackStream Stream; sf::Music This; + CallbackStream Stream; }; diff --git a/src/CSFML/Graphics/Font.cpp b/src/CSFML/Graphics/Font.cpp index 8925378..45edd2f 100644 --- a/src/CSFML/Graphics/Font.cpp +++ b/src/CSFML/Graphics/Font.cpp @@ -60,15 +60,11 @@ sfFont* sfFont_createFromStream(sfInputStream* stream) { assert(stream); - auto* font = new sfFont; - font->Stream = CallbackStream(stream); + auto font = std::make_unique(sfFont{{}, {}, {stream}}); if (!font->This.openFromStream(font->Stream)) - { - delete font; - font = nullptr; - } + return nullptr; - return font; + return font.release(); } diff --git a/src/CSFML/Graphics/Texture.cpp b/src/CSFML/Graphics/Texture.cpp index 2002637..b2fe59c 100644 --- a/src/CSFML/Graphics/Texture.cpp +++ b/src/CSFML/Graphics/Texture.cpp @@ -34,19 +34,17 @@ #include #include +#include + //////////////////////////////////////////////////////////// sfTexture* sfTexture_create(sfVector2u size) { - auto* texture = new sfTexture; - + auto texture = std::make_unique(); if (!texture->This->resize(convertVector2(size))) - { - delete texture; - texture = nullptr; - } + return nullptr; - return texture; + return texture.release(); } @@ -55,17 +53,12 @@ sfTexture* sfTexture_createFromFile(const char* filename, const sfIntRect* area) { assert(filename); - auto* texture = new sfTexture; - - const sf::IntRect rect = area ? convertRect(*area) : sf::IntRect(); - + const auto rect = area ? convertRect(*area) : sf::IntRect(); + auto texture = std::make_unique(); if (!texture->This->loadFromFile(filename, false, rect)) - { - delete texture; - texture = nullptr; - } + return nullptr; - return texture; + return texture.release(); } //////////////////////////////////////////////////////////// @@ -73,49 +66,34 @@ sfTexture* sfTexture_createSrgbFromFile(const char* filename, const sfIntRect* a { assert(filename); - auto* texture = new sfTexture; - - const sf::IntRect rect = area ? convertRect(*area) : sf::IntRect(); - + const auto rect = area ? convertRect(*area) : sf::IntRect(); + auto texture = std::make_unique(); if (!texture->This->loadFromFile(filename, true, rect)) - { - delete texture; - texture = nullptr; - } + return nullptr; - return texture; + return texture.release(); } //////////////////////////////////////////////////////////// sfTexture* sfTexture_createFromMemory(const void* data, size_t sizeInBytes, const sfIntRect* area) { - auto* texture = new sfTexture; - - const sf::IntRect rect = area ? convertRect(*area) : sf::IntRect(); - + const auto rect = area ? convertRect(*area) : sf::IntRect(); + auto texture = std::make_unique(); if (!texture->This->loadFromMemory(data, sizeInBytes, false, rect)) - { - delete texture; - texture = nullptr; - } + return nullptr; - return texture; + return texture.release(); } //////////////////////////////////////////////////////////// sfTexture* sfTexture_createSrgbFromMemory(const void* data, size_t sizeInBytes, const sfIntRect* area) { - auto* texture = new sfTexture; - - const sf::IntRect rect = area ? convertRect(*area) : sf::IntRect(); - + const auto rect = area ? convertRect(*area) : sf::IntRect(); + auto texture = std::make_unique(); if (!texture->This->loadFromMemory(data, sizeInBytes, true, rect)) - { - delete texture; - texture = nullptr; - } + return nullptr; - return texture; + return texture.release(); } @@ -124,18 +102,13 @@ sfTexture* sfTexture_createFromStream(sfInputStream* stream, const sfIntRect* ar { assert(stream); - auto* texture = new sfTexture; - - const sf::IntRect rect = area ? convertRect(*area) : sf::IntRect(); - + const auto rect = area ? convertRect(*area) : sf::IntRect(); CallbackStream sfmlStream(stream); + auto texture = std::make_unique(); if (!texture->This->loadFromStream(sfmlStream, false, rect)) - { - delete texture; - texture = nullptr; - } + return nullptr; - return texture; + return texture.release(); } //////////////////////////////////////////////////////////// @@ -143,18 +116,13 @@ sfTexture* sfTexture_createSrgbFromStream(sfInputStream* stream, const sfIntRect { assert(stream); - auto* texture = new sfTexture; - - const sf::IntRect rect = area ? convertRect(*area) : sf::IntRect(); - + const auto rect = area ? convertRect(*area) : sf::IntRect(); CallbackStream sfmlStream(stream); + auto texture = std::make_unique(); if (!texture->This->loadFromStream(sfmlStream, true, rect)) - { - delete texture; - texture = nullptr; - } + return nullptr; - return texture; + return texture.release(); } @@ -163,17 +131,12 @@ sfTexture* sfTexture_createFromImage(const sfImage* image, const sfIntRect* area { assert(image); - auto* texture = new sfTexture; - - const sf::IntRect rect = area ? convertRect(*area) : sf::IntRect(); - + const auto rect = area ? convertRect(*area) : sf::IntRect(); + auto texture = std::make_unique(); if (!texture->This->loadFromImage(image->This, false, rect)) - { - delete texture; - texture = nullptr; - } + return nullptr; - return texture; + return texture.release(); } //////////////////////////////////////////////////////////// @@ -181,17 +144,12 @@ sfTexture* sfTexture_createSrgbFromImage(const sfImage* image, const sfIntRect* { assert(image); - auto* texture = new sfTexture; - - const sf::IntRect rect = area ? convertRect(*area) : sf::IntRect(); - + const auto rect = area ? convertRect(*area) : sf::IntRect(); + auto texture = std::make_unique(); if (!texture->This->loadFromImage(image->This, true, rect)) - { - delete texture; - texture = nullptr; - } + return nullptr; - return texture; + return texture.release(); } //////////////////////////////////////////////////////////// diff --git a/src/CSFML/Graphics/VertexBuffer.cpp b/src/CSFML/Graphics/VertexBuffer.cpp index ef0313c..ae69610 100644 --- a/src/CSFML/Graphics/VertexBuffer.cpp +++ b/src/CSFML/Graphics/VertexBuffer.cpp @@ -32,20 +32,14 @@ //////////////////////////////////////////////////////////// sfVertexBuffer* sfVertexBuffer_create(unsigned int vertexCount, sfPrimitiveType type, sfVertexBufferUsage usage) { - auto* buffer = new sfVertexBuffer; + sf::VertexBuffer buffer; + if (!buffer.create(vertexCount)) + return nullptr; - if (!buffer->This.create(vertexCount)) - { - delete buffer; - buffer = nullptr; - } - else - { - buffer->This.setPrimitiveType(static_cast(type)); - buffer->This.setUsage(static_cast(usage)); - } + buffer.setPrimitiveType(static_cast(type)); + buffer.setUsage(static_cast(usage)); - return buffer; + return new sfVertexBuffer{std::move(buffer)}; } diff --git a/src/CSFML/Network/TcpListener.cpp b/src/CSFML/Network/TcpListener.cpp index e047789..d83d3b7 100644 --- a/src/CSFML/Network/TcpListener.cpp +++ b/src/CSFML/Network/TcpListener.cpp @@ -29,6 +29,8 @@ #include #include +#include + //////////////////////////////////////////////////////////// sfTcpListener* sfTcpListener_create() @@ -90,14 +92,13 @@ sfSocketStatus sfTcpListener_accept(sfTcpListener* listener, sfTcpSocket** conne assert(listener); assert(connected); - *connected = new sfTcpSocket; - auto status = static_cast(listener->This.accept((*connected)->This)); + auto socket = std::make_unique(); + auto status = static_cast(listener->This.accept(socket->This)); if (status != sfSocketDone) - { - delete *connected; *connected = nullptr; - } + else + *connected = socket.release(); return status; }