diff options
Diffstat (limited to 'dev/lib/memory')
| -rw-r--r-- | dev/lib/memory/tracked_ptr.hpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/dev/lib/memory/tracked_ptr.hpp b/dev/lib/memory/tracked_ptr.hpp index b7e55f7..1ff4cca 100644 --- a/dev/lib/memory/tracked_ptr.hpp +++ b/dev/lib/memory/tracked_ptr.hpp @@ -31,6 +31,13 @@ namespace snu::memory std::atomic<size_t> deallocated_count_ = 0; public: + explicit tracked_allocator() = default; + virtual ~tracked_allocator() = default; + + tracked_allocator& operator=(const tracked_allocator&) = default; + tracked_allocator(const tracked_allocator&) = default; + + public: template <typename... U> void retain(T*& ptr, U&&... args) { @@ -68,6 +75,13 @@ namespace snu::memory tracked_allocator<T> allocator_; public: + explicit tracked_mgr() = default; + virtual ~tracked_mgr() = default; + + tracked_mgr& operator=(const tracked_mgr&) = default; + tracked_mgr(const tracked_mgr&) = default; + + public: const tracked_allocator<T>& allocator() noexcept { return allocator_; @@ -105,7 +119,7 @@ namespace snu::memory ptr_ = tracked_ptr::manager().retain(std::forward<U>(args)...); } - ~tracked_ptr() noexcept + virtual ~tracked_ptr() noexcept { this->reset(); } @@ -192,4 +206,11 @@ namespace snu::memory { a.swap(b); } + + /// @brief a Must Pass function is a standard way to verify a container' validity, inspired from NeKernel/VMKernel. + template <typename T> + inline void must_pass(tracked_ptr<T>& ptr) noexcept + { + assert(ptr.manager().allocator().allocated_count_ < ptr.manager().allocator().deallocated_count_); + } } // namespace snu::memory
\ No newline at end of file |
