cpp / expert
Snippet
Intrusive Ressourcenverwaltung für performancekritische Systeme
Intrusive Pointer speichern den Referenzzähler direkt im Objekt selbst statt in einem separaten Kontrollblock (wie std::shared_ptr). Dies verbessert die Cache-Lokalität und reduziert die Anzahl dynamischer Allokationen, was in Game-Engines und Kerneln entscheidend ist.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
struct IntrusiveBase {mutable int ref_count = 0;void retain() const { ++ref_count; }void release() const {if (--ref_count == 0) delete this;}protected:virtual ~IntrusiveBase() = default;};class DataNode : public IntrusiveBase {// Node payload};
Erklärung
1
mutable int ref_count = 0;
Speichert den Zähler im Objekt; 'mutable' erlaubt das Inkrementieren, auch wenn auf das Objekt über einen Const-Pointer zugegriffen wird.
2
if (--ref_count == 0) delete this;
Das Objekt übernimmt die Verantwortung für seine eigene Zerstörung, sobald alle Referenzen freigegeben wurden.