Diligent Engine
 
Loading...
Searching...
No Matches
Diligent::IReferenceCounters Class Referenceabstract

#include <ReferenceCounters.h>

Public Member Functions

virtual ReferenceCounterValueType AddStrongRef ()=0
 Increments the number of strong references by 1.
 
virtual ReferenceCounterValueType ReleaseStrongRef ()=0
 
virtual ReferenceCounterValueType AddWeakRef ()=0
 Increments the number of weak references by 1.
 
virtual ReferenceCounterValueType ReleaseWeakRef ()=0
 
virtual void QueryObject (struct IObject **ppObject)=0
 Queries a pointer to the IUnknown interface of the referenced object.
 
virtual ReferenceCounterValueType GetNumStrongRefs () const =0
 Returns the number of outstanding strong references.
 
virtual ReferenceCounterValueType GetNumWeakRefs () const =0
 Returns the number of outstanding weak references.
 

Detailed Description

Base interface for a reference counter object that stores the number of strong and weak references and the pointer to the object. It is necessary to separate reference counters from the object to support weak pointers.

Member Function Documentation

◆ AddStrongRef()

virtual ReferenceCounterValueType Diligent::IReferenceCounters::AddStrongRef ( )
pure virtual

Increments the number of strong references by 1.

Returns
The number of strong references after incrementing the counter.
Remarks
The method is thread-safe and does not require explicit synchronization.
Note
In a multithreaded environment, the returned number may not be reliable as other threads may simultaneously change the actual value of the counter.

◆ AddWeakRef()

virtual ReferenceCounterValueType Diligent::IReferenceCounters::AddWeakRef ( )
pure virtual

Increments the number of weak references by 1.

Returns
The number of weak references after incrementing the counter.
Remarks
The method is thread-safe and does not require explicit synchronization.
Note
In a multithreaded environment, the returned number may not be reliable as other threads may simultaneously change the actual value of the counter.

◆ GetNumStrongRefs()

virtual ReferenceCounterValueType Diligent::IReferenceCounters::GetNumStrongRefs ( ) const
pure virtual

Returns the number of outstanding strong references.

Returns
The number of strong references.
Note
In a multithreaded environment, the returned number may not be reliable as other threads may simultaneously change the actual value of the counter. The only reliable value is 0 as the object is destroyed when the last strong reference is released.

◆ GetNumWeakRefs()

virtual ReferenceCounterValueType Diligent::IReferenceCounters::GetNumWeakRefs ( ) const
pure virtual

Returns the number of outstanding weak references.

Returns
The number of weak references.
Note
In a multithreaded environment, the returned number may not be reliable as other threads may simultaneously change the actual value of the counter.

◆ QueryObject()

virtual void Diligent::IReferenceCounters::QueryObject ( struct IObject ** ppObject)
pure virtual

Queries a pointer to the IUnknown interface of the referenced object.

Parameters
[out]ppObject- Memory address where the pointer to the object will be stored.
Remarks
If the object was destroyed, nullptr will be written to *ppObject. If the object was not released, the pointer to the object's IUnknown interface will be stored. In this case, the number of strong references to the object will be incremented by 1.
The method is thread-safe and does not require explicit synchronization.

◆ ReleaseStrongRef()

virtual ReferenceCounterValueType Diligent::IReferenceCounters::ReleaseStrongRef ( )
pure virtual

Decrements the number of strong references by 1 and destroys the referenced object when the counter reaches zero. If there are no more weak references, destroys the reference counters object itself.

Returns
The number of strong references after decrementing the counter.
Remarks
The referenced object is destroyed when the last strong reference is released.
If there are no more weak references, the reference counters object itself is also destroyed.
The method is thread-safe and does not require explicit synchronization.
Note
In a multithreaded environment, the returned number may not be reliable as other threads may simultaneously change the actual value of the counter. The only reliable value is 0 as the object is destroyed when the last strong reference is released.

◆ ReleaseWeakRef()

virtual ReferenceCounterValueType Diligent::IReferenceCounters::ReleaseWeakRef ( )
pure virtual

Decrements the number of weak references by 1. If there are no more strong and weak references, destroys the reference counters object itself.

Returns
The number of weak references after decrementing the counter.
Remarks
The method is thread-safe and does not require explicit synchronization.
Note
In a multithreaded environment, the returned number may not be reliable as other threads may simultaneously change the actual value of the counter.