0 Tage Serie
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.