Pigweed
C/C++ API Reference
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
Public Types | Public Member Functions | List of all members
pw::RuntimeInitGlobal< T > Class Template Reference

Public Types

using value_type = T
 

Public Member Functions

template<typename... Args, typename std::enable_if<!std::is_same< void(std::decay_t< Args > &...), void(RuntimeInitGlobal &)>::value , int , ::type = 0>
 RuntimeInitGlobal (Args &&... args)
 
 RuntimeInitGlobal (const T &x)
 
 RuntimeInitGlobal (T &&x)
 
 RuntimeInitGlobal (const RuntimeInitGlobal &)=delete
 
RuntimeInitGlobaloperator= (const RuntimeInitGlobal &)=delete
 
const T & operator* () const
 
T & operator* ()
 
const T * operator-> () const
 
T * operator-> ()
 

Detailed Description

template<typename T>
class pw::RuntimeInitGlobal< T >

Declares a global variable that is initialized at runtime and whose destructor is never run.

This class is the same as pw::NoDestructor, except that pw::NoDestructor may be constinit if T is constexpr constructible. pw::RuntimeInitGlobal instances can never be constinit. pw::RuntimeInitGlobal prevents constant initialization inserting empty volatile inline assembly.

Note
RuntimeInitGlobal should only be used when T should not be constant initialized; otherwise, use pw::NoDestructor. Constant initialization moves objects from .bss to .data. This can increase binary size if the object is larger than the code that initializes it.
Warning
Misuse of RuntimeInitGlobal can cause memory leaks and other problems. RuntimeInitGlobal should only be used for global variables.

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