From: <ice...@us...> - 2009-07-05 19:25:05
|
Revision: 2078 http://crayzedsgui.svn.sourceforge.net/crayzedsgui/?rev=2078&view=rev Author: ice-drezday Date: 2009-07-05 19:24:55 +0000 (Sun, 05 Jul 2009) Log Message: ----------- Fix memory leaks in the RenderedString related classes. Modified Paths: -------------- cegui_mk2/trunk/cegui/include/CEGUIRenderedStringWordWrapper.h cegui_mk2/trunk/cegui/src/CEGUIRenderedString.cpp Modified: cegui_mk2/trunk/cegui/include/CEGUIRenderedStringWordWrapper.h =================================================================== --- cegui_mk2/trunk/cegui/include/CEGUIRenderedStringWordWrapper.h 2009-07-05 12:46:56 UTC (rev 2077) +++ cegui_mk2/trunk/cegui/include/CEGUIRenderedStringWordWrapper.h 2009-07-05 19:24:55 UTC (rev 2078) @@ -46,6 +46,8 @@ public: //! Constructor. RenderedStringWordWrapper(const RenderedString& string); + //! Destructor. + ~RenderedStringWordWrapper(); // implementation of base interface void format(const Size& area_size); @@ -56,6 +58,8 @@ float getVerticalExtent() const; protected: + //! Delete the current formatters and associated RenderedStrings + void deleteFormatters(); //! type of collection used to track the formatted lines. typedef std::vector<T*> LineList; //! collection of lines. @@ -72,12 +76,16 @@ //----------------------------------------------------------------------------// template <typename T> +RenderedStringWordWrapper<T>::~RenderedStringWordWrapper() +{ + deleteFormatters(); +} + +//----------------------------------------------------------------------------// +template <typename T> void RenderedStringWordWrapper<T>::format(const Size& area_size) { - // delete existing formatters - for (size_t i = 0; i < d_lines.size(); ++i) - delete d_lines[i]; - d_lines.clear(); + deleteFormatters(); RenderedString rstring, lstring; rstring = *d_renderedString; @@ -160,7 +168,24 @@ } //----------------------------------------------------------------------------// +template <typename T> +void RenderedStringWordWrapper<T>::deleteFormatters() +{ + for (size_t i = 0; i < d_lines.size(); ++i) + { + // get the rendered string back from rthe formatter + const RenderedString* rs = &d_lines[i]->getRenderedString(); + // delete the formatter + delete d_lines[i]; + // delete the rendered string. + delete rs; + } + d_lines.clear(); +} + +//----------------------------------------------------------------------------// + } // End of CEGUI namespace section #endif // end of guard _CEGUIRenderedStringWordWrapper_h_ Modified: cegui_mk2/trunk/cegui/src/CEGUIRenderedString.cpp =================================================================== --- cegui_mk2/trunk/cegui/src/CEGUIRenderedString.cpp 2009-07-05 12:46:56 UTC (rev 2077) +++ cegui_mk2/trunk/cegui/src/CEGUIRenderedString.cpp 2009-07-05 19:24:55 UTC (rev 2078) @@ -39,6 +39,7 @@ //----------------------------------------------------------------------------// RenderedString::~RenderedString() { + clearComponents(); } //----------------------------------------------------------------------------// This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |