diff options
author | KUDr <KUDr@openttd.org> | 2007-07-21 14:01:12 +0000 |
---|---|---|
committer | KUDr <KUDr@openttd.org> | 2007-07-21 14:01:12 +0000 |
commit | 18c8a920d2f357c3f83eb1aa228d2432e333a399 (patch) | |
tree | a49dc8df36f06910cc1c1a2b3853ec1b21a0598a /src/misc | |
parent | fc58c73bc5e1d9c8ff64fca878d93ef4be1623bd (diff) | |
download | openttd-18c8a920d2f357c3f83eb1aa228d2432e333a399.tar.xz |
(svn r10647) -Fix: AutoPtrT::operator =() didn't delete old object
Diffstat (limited to 'src/misc')
-rw-r--r-- | src/misc/autoptr.hpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/misc/autoptr.hpp b/src/misc/autoptr.hpp index edb7c10c6..8b0d920f5 100644 --- a/src/misc/autoptr.hpp +++ b/src/misc/autoptr.hpp @@ -81,8 +81,16 @@ public: /** assignment operator */ FORCEINLINE AutoPtrT& operator = (const AutoPtrT& src) { + /* Save original pointer and replace it with the given one to avoid recursive calls. */ + T* p = m_p; m_p = src.m_p; + if (m_p != NULL) src.m_p = NULL; + + if (p != NULL) { + /* Now we can safely delete the old one. */ + delete p; + } return *this; } |