15#ifndef A_UTIL_UTIL_RESULT_IMPL_REFERENCE_COUNTED_OBJECT_HEADER_INCLUDED
16#define A_UTIL_UTIL_RESULT_IMPL_REFERENCE_COUNTED_OBJECT_HEADER_INCLUDED
32template <
typename Interface,
typename Implementation>
35 ReferenceCountedObject(
const ReferenceCountedObject&);
36 ReferenceCountedObject& operator=(
const ReferenceCountedObject&);
44 template <
typename... Args>
48 _resource(std::forward<Args>(args)...)
61 if (0 == (--_reference_count)) {
91 mutable std::atomic<std::int32_t> _reference_count;
93 mutable std::atomic_int_fast32_t _reference_count;
95 Implementation _resource;
103template <
typename Interface,
typename Implementation>
107 UncountedObject& operator=(UncountedObject&) =
delete;
109 UncountedObject& operator=(UncountedObject&&) =
delete;
120 template <
typename... Args>
160 Implementation _resource;
Definition reference_counted_object_intf.h:29
Default implementation of a reference counter.
Definition reference_counted_object.h:33
ReferenceCountedObject(Args &&... args)
Definition reference_counted_object.h:45
virtual void addReference() const
Increase the reference count by 1.
Definition reference_counted_object.h:53
virtual const Interface & getObject() const
Definition reference_counted_object.h:70
virtual void removeReference() const
Decrease the reference count by 1, deleting *this if it was the last reference.
Definition reference_counted_object.h:59
virtual Interface & getObject()
Definition reference_counted_object.h:79
Interface & getObject() override
Definition reference_counted_object.h:154
UncountedObject()=default
Default CTOR.
virtual ~UncountedObject()=default
Default DTOR, provided to be consistent with rule-of-five.
const Interface & getObject() const override
Definition reference_counted_object.h:145
UncountedObject(Args &&... args)
Definition reference_counted_object.h:121
void addReference() const override
Noop.
Definition reference_counted_object.h:130
void removeReference() const override
Noop.
Definition reference_counted_object.h:136
Serves as namespace for result implementation details.
Definition result.h:22
Serves as component for functionality handling error and return types.
Definition result.h:20
Serves as the root component, with common functionality documented in core functionality.
Definition base.h:24