cpp / expert
Snippet
Explizite Speicherlayouts in Puffern
Low-Level-Speicherverwaltung mittels Placement New und manuellen Destruktoraufrufen. Diese Technik ist essenziell für den Bau eigener Container oder die Verwaltung von Objekten in vorallozierten Speicherpools mit strengen Alignment-Anforderungen.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template <typename T>struct ManualStorage {alignas(T) std::byte buffer[sizeof(T)];bool initialized = false;template <typename... Args>void construct(Args&&... args) {new (buffer) T(std::forward<Args>(args)...);initialized = true;}void destroy() {if (initialized) {reinterpret_cast<T*>(buffer)->~T();initialized = false;}}T* get() { return reinterpret_cast<T*>(buffer); }};
Erklärung
1
alignas(T) std::byte buffer[sizeof(T)];
Stellt sicher, dass das rohe Byte-Array im Speicher korrekt für den spezifischen Typ T ausgerichtet ist.
2
new (buffer) T(std::forward<Args>(args)...);
Placement New: konstruiert ein Objekt vom Typ T direkt an der angegebenen Speicheradresse.