Diligent Engine API Reference: Diligent::IReferenceCounters Class Reference

Diligent Engine API Reference

Public Member Functions | List of all members
Diligent::IReferenceCounters Class Referenceabstract

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. More...

Inherited by Diligent::RefCountersImpl.

## Public Member Functions
virtual CounterValueType | AddStrongRef ()=0
| Increments the number of strong references by 1. More...
virtual CounterValueType | ReleaseStrongRef ()=0
| 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. More...
virtual CounterValueType | AddWeakRef ()=0
| Increments the number of weak references by 1. More...
virtual CounterValueType | ReleaseWeakRef ()=0
| Decrements the number of weak references by 1. If there are no more strong and weak references, destroys the reference counters object itself. More...
virtual void | GetObject (class IObject **ppObject)=0
| Gets the pointer to the IUnknown interface of the referenced object. More...
virtual CounterValueType | GetNumStrongRefs () const =0
| Returns the number of outstanding strong references. More...
virtual CounterValueType | GetNumWeakRefs () const =0
| Returns the number of outstanding weak references. More...

## 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 CounterValueType 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 CounterValueType 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 CounterValueType 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 CounterValueType 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.

## ◆ GetObject()

virtual void Diligent::IReferenceCounters::GetObject | ( | class IObject ** | ppObject | ) |
| pure virtual

Gets the 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 CounterValueType 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 CounterValueType 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.