MuldeR's Utilities for Qt: MUtils::Lazy< T > Class Template Reference

MuldeR's Utilities for Qt MUtilities

Public Member Functions | Protected Member Functions | List of all members
MUtils::Lazy< T > Class Template Reference

Lazy initialization template class. More...

`#include <Lazy.h>`

## Public Member Functions
| Lazy (std::function< T *(void)> &&initializer)
T & | operator* (void)
T * | operator-> (void)
bool | initialized ()

## Protected Member Functions
__forceinline T * | getValue ()

## Detailed Description

### template<typename T>
class MUtils::Lazy< T >

Lazy initialization template class.

The lazy-initialized value of type T can be obtained from a `Lazy<T>` instance by using the `operator*()`. Initialization of the value happens when the `operator*()` is called for the very first time, by invoking the `initializer` lambda-function that was passed to the constructor. The return value of the `initializer` lambda-function is then stored internally, so that any subsequent call to the `operator*()` immediately returns the previously created value.

Note on thread-saftey: This class is thread-safe in the sense that all calls to `operator*()` on the same `Lazy<T>` instance, regardless from which thread, are guaranteed to return the exactly same value/object. The first thread trying to access the value will invoke the `initializer` lambda-function; concurrent threads may need to busy-wait until the initialization is completed. The `initializer` lambda-function is invoked at most once.

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

- include/MUtils/Lazy.h