1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- //
- // AutoReleasePool.h
- //
- // Library: Foundation
- // Package: Core
- // Module: AutoReleasePool
- //
- // Definition of the AutoReleasePool class.
- //
- // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
- // and Contributors.
- //
- // SPDX-License-Identifier: BSL-1.0
- //
- #ifndef Foundation_AutoReleasePool_INCLUDED
- #define Foundation_AutoReleasePool_INCLUDED
- #include "Poco/Foundation.h"
- #include <list>
- namespace Poco {
- template <class C>
- class AutoReleasePool
- /// An AutoReleasePool implements simple garbage collection for
- /// reference-counted objects.
- /// It temporarily takes ownwership of reference-counted objects that
- /// nobody else wants to take ownership of and releases them
- /// at a later, appropriate point in time.
- ///
- /// Note: The correct way to add an object hold by an AutoPtr<> to
- /// an AutoReleasePool is by invoking the AutoPtr's duplicate()
- /// method. Example:
- /// AutoReleasePool<C> arp;
- /// AutoPtr<C> ptr = new C;
- /// ...
- /// arp.add(ptr.duplicate());
- {
- public:
- AutoReleasePool()
- /// Creates the AutoReleasePool.
- {
- }
-
- ~AutoReleasePool()
- /// Destroys the AutoReleasePool and releases
- /// all objects it currently holds.
- {
- release();
- }
-
- void add(C* pObject)
- /// Adds the given object to the AutoReleasePool.
- /// The object's reference count is not modified
- {
- if (pObject)
- _list.push_back(pObject);
- }
-
- void release()
- /// Releases all objects the AutoReleasePool currently holds
- /// by calling each object's release() method.
- {
- while (!_list.empty())
- {
- _list.front()->release();
- _list.pop_front();
- }
- }
-
- private:
- typedef std::list<C*> ObjectList;
-
- ObjectList _list;
- };
- } // namespace Poco
- #endif // Foundation_AutoReleasePool_INCLUDED
|