template class ugcs::vsm::Reference_guard¶
Overview¶
Reference guard objects keep references for managed objects. More…
#include <reference_guard.h> template <typename Class_ptr> class Reference_guard { public: // classes class Hasher; // fields decltype(*std::declval<Class_ptr>() operator*)(); // construction Reference_guard(std::nullptr_t ptr = nullptr); Reference_guard(const Class_ptr& ptr); Reference_guard(Class_ptr&& ptr); Reference_guard(const Reference_guard<Class_ptr>& ref); Reference_guard(Reference_guard<Class_ptr>&& ref); template <typename Src_class_ptr> Reference_guard(const Reference_guard<Src_class_ptr>& ref); template <typename Src_class_ptr> Reference_guard(Reference_guard<Src_class_ptr>&& ref); // methods Reference_guard<Class_ptr>& operator = (const Reference_guard<Class_ptr>& ref); Reference_guard<Class_ptr>& operator = (Reference_guard<Class_ptr>&& ref); Reference_guard<Class_ptr>& operator = (std::nullptr_t ref __attribute__(unused)); bool operator == (const Reference_guard<Class_ptr>& ref) const; bool operator != (const Reference_guard<Class_ptr>& ref) const; operator bool () const; Class_ptr operator -> (); const Class_ptr operator -> () const; };
Detailed Documentation¶
Reference guard objects keep references for managed objects.
The managed object should have Add_ref() and Release_ref() methods which are called by the guarded object. Release_ref() can tear down the object when last reference is released. Both Add_ref() and Release_ref() should be thread-safe.
Parameters:
Class_ptr |
Type for referenced object pointer. It can be either plain pointer or any smart pointer class. |
Fields¶
decltype(*std::declval<Class_ptr>() operator*)()
Dereference is transparent.
Construction¶
Reference_guard(std::nullptr_t ptr = nullptr)
Construct an empty guard which doesn’t have managed object.
Reference_guard(const Class_ptr& ptr)
Construct guard object.
Reference_guard(Class_ptr&& ptr)
Construct guard by moving managed object to the guard.
Reference_guard(const Reference_guard<Class_ptr>& ref)
Copy guard object.
Reference_guard(Reference_guard<Class_ptr>&& ref)
Move guard object.
template <typename Src_class_ptr> Reference_guard(const Reference_guard<Src_class_ptr>& ref)
Copy guard object.
template <typename Src_class_ptr> Reference_guard(Reference_guard<Src_class_ptr>&& ref)
Move guard object.
Methods¶
Reference_guard<Class_ptr>& operator = (const Reference_guard<Class_ptr>& ref)
Copy assignment.
Reference_guard<Class_ptr>& operator = (Reference_guard<Class_ptr>&& ref)
Move assignment.
Reference_guard<Class_ptr>& operator = (std::nullptr_t ref __attribute__(unused))
nullptr assignment.
bool operator == (const Reference_guard<Class_ptr>& ref) const
Guards are equal when managed object pointers are equal.
bool operator != (const Reference_guard<Class_ptr>& ref) const
Guards are not equal when managed object pointers are not equal.
operator bool () const
Guards yields to true when managed object does exist.
Class_ptr operator -> ()
Member access is transparent.
const Class_ptr operator -> () const
Member access is transparent.