diff options
author | David Tardon <dtardon@redhat.com> | 2018-03-25 14:23:08 +0200 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2018-03-25 14:23:40 +0200 |
commit | 467618a5b883c7303fc6ef8e10756e203ceaed11 (patch) | |
tree | 91740d7b893aa64874aa5f45e8bc17bcc76b365b | |
parent | 8dfa37807ee1d40f98729a911db3a52df0d2e65b (diff) |
avoid manual memory mgmt
Change-Id: I4694b93a135dc568beb234a6300a492326122257
-rw-r--r-- | src/lib/VSDCharacterList.cpp | 20 | ||||
-rw-r--r-- | src/lib/VSDCharacterList.h | 3 |
2 files changed, 9 insertions, 14 deletions
diff --git a/src/lib/VSDCharacterList.cpp b/src/lib/VSDCharacterList.cpp index ae702ef..65de7af 100644 --- a/src/lib/VSDCharacterList.cpp +++ b/src/lib/VSDCharacterList.cpp @@ -83,14 +83,14 @@ libvisio::VSDCharacterList::VSDCharacterList(const libvisio::VSDCharacterList &c m_elementsOrder(charList.m_elementsOrder) { for (auto iter = charList.m_elements.begin(); iter != charList.m_elements.end(); ++iter) - m_elements[iter->first] = iter->second->clone(); + m_elements[iter->first] = clone(iter->second); } libvisio::VSDCharacterList &libvisio::VSDCharacterList::operator=(const libvisio::VSDCharacterList &charList) { clear(); for (auto iter = charList.m_elements.begin(); iter != charList.m_elements.end(); ++iter) - m_elements[iter->first] = iter->second->clone(); + m_elements[iter->first] = clone(iter->second); m_elementsOrder = charList.m_elementsOrder; return *this; } @@ -107,14 +107,11 @@ void libvisio::VSDCharacterList::addCharIX(unsigned id, unsigned level, unsigned const boost::optional<bool> &allcaps, const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript, const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth) { - auto *tmpElement = dynamic_cast<VSDCharIX *>(m_elements[id]); + auto *tmpElement = dynamic_cast<VSDCharIX *>(m_elements[id].get()); if (!tmpElement) { - if (m_elements[id]) - delete m_elements[id]; - - m_elements[id] = new VSDCharIX(id, level, charCount, font, fontColour, fontSize, bold, italic, underline, doubleunderline, - strikeout, doublestrikeout, allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth); + m_elements[id] = make_unique<VSDCharIX>(id, level, charCount, font, fontColour, fontSize, bold, italic, underline, doubleunderline, + strikeout, doublestrikeout, allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth); } else tmpElement->m_style.override(VSDOptionalCharStyle(charCount, font, fontColour, fontSize, bold, italic, underline, @@ -168,19 +165,18 @@ void libvisio::VSDCharacterList::handle(VSDCollector *collector) const { if (empty()) return; - std::map<unsigned, VSDCharacterListElement *>::const_iterator iter; if (!m_elementsOrder.empty()) { for (unsigned i = 0; i < m_elementsOrder.size(); i++) { - iter = m_elements.find(m_elementsOrder[i]); + auto iter = m_elements.find(m_elementsOrder[i]); if (iter != m_elements.end() && (0 == i || iter->second->getCharCount())) iter->second->handle(collector); } } else { - for (iter = m_elements.begin(); iter != m_elements.end(); ++iter) + for (auto iter = m_elements.begin(); iter != m_elements.end(); ++iter) if (m_elements.begin() == iter || iter->second->getCharCount()) iter->second->handle(collector); } @@ -188,8 +184,6 @@ void libvisio::VSDCharacterList::handle(VSDCollector *collector) const void libvisio::VSDCharacterList::clear() { - for (auto &element : m_elements) - delete element.second; m_elements.clear(); m_elementsOrder.clear(); } diff --git a/src/lib/VSDCharacterList.h b/src/lib/VSDCharacterList.h index 5211384..555b9d6 100644 --- a/src/lib/VSDCharacterList.h +++ b/src/lib/VSDCharacterList.h @@ -10,6 +10,7 @@ #ifndef __VSDCHARACTERLIST_H__ #define __VSDCHARACTERLIST_H__ +#include <memory> #include <vector> #include <map> #include "VSDTypes.h" @@ -48,7 +49,7 @@ public: return (m_elements.empty()); } private: - std::map<unsigned, VSDCharacterListElement *> m_elements; + std::map<unsigned, std::unique_ptr<VSDCharacterListElement>> m_elements; std::vector<unsigned> m_elementsOrder; }; |