diff --git a/src/playlist/cue/CueParser.cxx b/src/playlist/cue/CueParser.cxx index 25099152e..c74973e03 100644 --- a/src/playlist/cue/CueParser.cxx +++ b/src/playlist/cue/CueParser.cxx @@ -22,20 +22,12 @@ #include "util/Alloc.hxx" #include "util/StringUtil.hxx" #include "util/CharUtil.hxx" -#include "DetachedSong.hxx" #include "tag/Tag.hxx" #include #include #include -CueParser::~CueParser() -{ - delete current; - delete previous; - delete finished; -} - static const char * cue_next_word(char *p, char **pp) { @@ -160,9 +152,9 @@ CueParser::Commit() assert(!current->GetTag().IsDefined()); current->SetTag(song_tag.Commit()); - finished = previous; - previous = current; - current = nullptr; + finished = std::move(previous); + previous = std::move(current); + current.reset(); } void @@ -237,7 +229,7 @@ CueParser::Feed2(char *p) } state = TRACK; - current = new DetachedSong(filename); + current.reset(new DetachedSong(filename)); assert(!current->GetTag().IsDefined()); song_tag = header_tag; @@ -297,11 +289,9 @@ CueParser::Get() deliver all remaining (partial) results */ assert(current == nullptr); - finished = previous; - previous = nullptr; + finished = std::move(previous); + previous.reset(); } - DetachedSong *song = finished; - finished = nullptr; - return song; + return finished.release(); } diff --git a/src/playlist/cue/CueParser.hxx b/src/playlist/cue/CueParser.hxx index 32c617d1a..ea9782bef 100644 --- a/src/playlist/cue/CueParser.hxx +++ b/src/playlist/cue/CueParser.hxx @@ -21,10 +21,12 @@ #define MPD_CUE_PARSER_HXX #include "check.h" +#include "DetachedSong.hxx" #include "tag/TagBuilder.hxx" #include "Compiler.h" #include +#include class DetachedSong; struct Tag; @@ -74,19 +76,19 @@ class CueParser { /** * The song currently being edited. */ - DetachedSong *current = nullptr; + std::unique_ptr current; /** * The previous song. It is remembered because its end_time * will be set to the current song's start time. */ - DetachedSong *previous = nullptr; + std::unique_ptr previous; /** * A song that is completely finished and can be returned to * the caller via cue_parser_get(). */ - DetachedSong *finished = nullptr; + std::unique_ptr finished; /** * Tracks whether cue_parser_finish() has been called. If @@ -96,8 +98,6 @@ class CueParser { bool end = false; public: - ~CueParser(); - /** * Feed a text line from the CUE file into the parser. Call * cue_parser_get() after this to see if a song has been finished.