diff --git a/src/common/classes/auto.h b/src/common/classes/auto.h index fffbb61c736..cc4d59b973f 100644 --- a/src/common/classes/auto.h +++ b/src/common/classes/auto.h @@ -132,6 +132,7 @@ class AutoPtr { if (this != &r) { + Clear::clear(ptr); ptr = r.ptr; r.ptr = nullptr; } diff --git a/src/common/tests/AutoPtrTests.cpp b/src/common/tests/AutoPtrTests.cpp new file mode 100644 index 00000000000..765f3ad3f5f --- /dev/null +++ b/src/common/tests/AutoPtrTests.cpp @@ -0,0 +1,44 @@ +#include "boost/test/unit_test.hpp" +#include "../common/classes/auto.h" + +using namespace Firebird; + +BOOST_AUTO_TEST_SUITE(CommonClassesSuite) +BOOST_AUTO_TEST_SUITE(AutoPtrFunctionalTests) + +static int aliveCounter = 0; + +class TestRefCounter +{ +public: + TestRefCounter() + { + ++aliveCounter; + } + ~TestRefCounter() + { + --aliveCounter; + } +}; + +AutoPtr makePtr() +{ + return AutoPtr(new TestRefCounter()); +} + +BOOST_AUTO_TEST_CASE(StringAssignmentTest) +{ + AutoPtr ptr; + + ptr = makePtr(); + + ptr = makePtr(); + + ptr.reset(); + + BOOST_TEST(aliveCounter == 0); +} + + +BOOST_AUTO_TEST_SUITE_END() // AutoPtrFunctionalTests +BOOST_AUTO_TEST_SUITE_END() // CommonClassesSuite