diff --git a/src/Base/Reader.cpp b/src/Base/Reader.cpp index 29e6ccfdfb..8826507aaf 100644 --- a/src/Base/Reader.cpp +++ b/src/Base/Reader.cpp @@ -335,8 +335,8 @@ void Base::XMLReader::readFiles(zipios::ZipInputStream &zipstream) const try { Base::Reader reader(zipstream, jt->FileName, FileVersion); jt->Object->RestoreDocFile(reader); - if ( reader.getLocalReader() != nullptr ) - reader.getLocalReader()->readFiles(zipstream); + if (reader.getLocalReader()) + reader.getLocalReader()->readFiles(zipstream); } catch(...) { // For any exception we just continue with the next file. @@ -565,8 +565,6 @@ Base::Reader::Reader(std::istream& str, const std::string& name, int version) Base::Reader::~Reader() { - if ( this->localreader != nullptr ) - delete this->localreader; } std::string Base::Reader::getFileName() const @@ -584,13 +582,12 @@ std::istream& Base::Reader::getStream() return this->_str; } -void Base::Reader::initLocalReader(Base::XMLReader *ptr) +void Base::Reader::initLocalReader(std::shared_ptr reader) { - - this->localreader=ptr; + this->localreader = reader; } -Base::XMLReader *Base::Reader::getLocalReader() +std::shared_ptr Base::Reader::getLocalReader() const { - return(this->localreader); + return(this->localreader); } diff --git a/src/Base/Reader.h b/src/Base/Reader.h index 081193ef74..61460bd5f2 100644 --- a/src/Base/Reader.h +++ b/src/Base/Reader.h @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -299,14 +300,14 @@ public: std::istream& getStream(); std::string getFileName() const; int getFileVersion() const; - void initLocalReader(Base::XMLReader *ptr); - Base::XMLReader *getLocalReader(); + void initLocalReader(std::shared_ptr); + std::shared_ptr getLocalReader() const; private: std::istream& _str; std::string _name; int fileVersion; - Base::XMLReader *localreader=nullptr; + std::shared_ptr localreader; }; } diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index 8a7118561e..9091ae943c 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -1189,8 +1189,7 @@ void Document::Restore(Base::XMLReader &reader) void Document::RestoreDocFile(Base::Reader &reader) { // We must create an XML parser to read from the input stream - Base::XMLReader *localreader; - localreader = new Base::XMLReader("GuiDocument.xml", reader); + std::shared_ptr localreader = std::make_shared("GuiDocument.xml", reader); localreader->FileVersion = reader.getFileVersion(); localreader->readElement("Document");