The Pedigree Project 0.1
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
UniqueResource< T, Releaser > Class Template Reference

#include <UniqueResource.h>

+ Inheritance diagram for UniqueResource< T, Releaser >:
+ Collaboration diagram for UniqueResource< T, Releaser >:

Public Member Functions

 UniqueResource (UniqueResource &&other) noexcept
 
UniqueResourceoperator= (UniqueResource &&other) noexcept
 
T * get () const
 
T * operator-> () const
 
T & operator* () const
 
 operator bool () const
 
MUST_USE_RESULT T * release () noexcept
 
void reset (T *replacement=nullptr) noexcept
 

Static Public Member Functions

static MUST_USE_RESULT UniqueResource adopt (T *resource)
 

Private Member Functions

 UniqueResource (T *resource)
 
 UniqueResource (const UniqueResource &)=delete
 
UniqueResourceoperator= (const UniqueResource &)=delete
 

Private Attributes

T * m_Resource
 

Detailed Description

template<class T, class Releaser>
class UniqueResource< T, Releaser >

Owns one resource released by a stateless, compile-time policy.

Releaser must provide static void release(T *) and must consume the resource on every return; a fallible release must escalate or use another ownership type. The policy is not stored, so this wrapper has the same representation as the pointer it owns. It is intended for lexical ownership of C handles and similar resources. Release runs synchronously and must be legal in the destruction context; any wider protocol shutdown or concurrent drain remains an explicit operation.

Definition at line 26 of file UniqueResource.h.

Constructor & Destructor Documentation

◆ UniqueResource() [1/3]

template<class T , class Releaser >
UniqueResource< T, Releaser >::UniqueResource ( )
inline

Definition at line 28 of file UniqueResource.h.

◆ UniqueResource() [2/3]

template<class T , class Releaser >
UniqueResource< T, Releaser >::UniqueResource ( UniqueResource< T, Releaser > &&  other)
inlinenoexcept

Definition at line 30 of file UniqueResource.h.

◆ ~UniqueResource()

template<class T , class Releaser >
UniqueResource< T, Releaser >::~UniqueResource ( )
inline

Definition at line 32 of file UniqueResource.h.

◆ UniqueResource() [3/3]

template<class T , class Releaser >
UniqueResource< T, Releaser >::UniqueResource ( T *  resource)
inlineexplicitprivate

Definition at line 86 of file UniqueResource.h.

Member Function Documentation

◆ adopt()

template<class T , class Releaser >
static MUST_USE_RESULT UniqueResource UniqueResource< T, Releaser >::adopt ( T *  resource)
inlinestatic

Takes ownership of a resource returned by an acquisition API.

Definition at line 45 of file UniqueResource.h.

◆ get()

template<class T , class Releaser >
T * UniqueResource< T, Releaser >::get ( ) const
inline

Definition at line 49 of file UniqueResource.h.

◆ operator bool()

template<class T , class Releaser >
UniqueResource< T, Releaser >::operator bool ( ) const
inlineexplicit

Definition at line 61 of file UniqueResource.h.

◆ operator*()

template<class T , class Releaser >
T & UniqueResource< T, Releaser >::operator* ( ) const
inline

Definition at line 57 of file UniqueResource.h.

◆ operator->()

template<class T , class Releaser >
T * UniqueResource< T, Releaser >::operator-> ( ) const
inline

Definition at line 53 of file UniqueResource.h.

◆ operator=()

template<class T , class Releaser >
UniqueResource & UniqueResource< T, Releaser >::operator= ( UniqueResource< T, Releaser > &&  other)
inlinenoexcept

Definition at line 36 of file UniqueResource.h.

◆ release()

template<class T , class Releaser >
MUST_USE_RESULT T * UniqueResource< T, Releaser >::release ( )
inlinenoexcept

Transfers ownership to a caller or another lifetime domain.

Definition at line 66 of file UniqueResource.h.

◆ reset()

template<class T , class Releaser >
void UniqueResource< T, Releaser >::reset ( T *  replacement = nullptr)
inlinenoexcept

Releases the current resource, then adopts its replacement.

Definition at line 73 of file UniqueResource.h.

Member Data Documentation

◆ m_Resource

template<class T , class Releaser >
T* UniqueResource< T, Releaser >::m_Resource
private

Definition at line 91 of file UniqueResource.h.


The documentation for this class was generated from the following file: