Aufruf einer Methode vor der Initialisierung von statischen Variablen
-
Schreib dir doch eine Speicherverwaltungsklasse, wo du deine statischen Variablen und statische Methoden, auf die deine überschriebenen Operatoren zugreifen, drin hast. Da du nur ein Speicherverwaltungsobjekt brauchst, kann man da gut das Singleton Pattern anwenden und es bei Zugriff über die statischen Methoden ggf. einmalig initialisieren.
class MemManager { private: static MemManager* mng; MemManager() : ; //Konstruktor privat public: static MemManager* getThis(){ if (!mng) mng = new MemManager(); return mng; } static getmem() //wird vom Überschriebenen new() aufgerufen { MemManager* m = getThis(); //... } // usw. };/edit: mist, wieder zu lahm ^^
-
Ob es so gut ist, einen Memorymanager der new und delete überschreibt, mit new zu allokieren, um sicherzustellen, dass new und delete korrekt funktionieren?

-
da wird sich auch mit Sicherheit die althergebrachte Version von new nutzen lassen...
-
Für sowas würde ich wenn dann placement new verwenden, und den Speicher z.B. mit HeapAlloc(GetProcessHeap(), ...) anfordern. Das geht immer, ohne irgendwelche Initialisierungen.
-
Hey hey,
die Lösung mit dem Meyers-Singleton gefällt mir richtig gut!
Danke

MfG
sevenWaysToLove
-
@sevenWaysToLove:
dir ist schon klar dass dieses "meyers singleton" a) nicht threadsafe ist und b) genau das gleiche wie wenn du selbst bei jedem Funktionsaufruf "if (!initialized) initialize();" schreibst... ?
-
hustbaer schrieb:
...genau das gleiche wie wenn du selbst bei jedem Funktionsaufruf "if (!initialized) initialize();" schreibst... ?
Wahrscheinlich gefällt es ihm deswegen so gut ....

Gruß,
Simon2.
-
Ja, aber eine OOP-Variante ist einfach schicker ...

Im Endeffekt habe ich es jetzt auch so geloest ...

-
Ich hatte das deswegen erwähnt:
sevenWaysToLove schrieb:
Eine Möglichkeit ist ein Flag zu setzen und die Initialisierungsfunktion im überladenen New-Operator aufzurufen. Aber hierfür ist dann bei jedem new
eine Überprüfung notwendig, was nicht wirklich optimal istWenn das eine nicht optimal ist, ist es das andere auch nicht, weil das eine gleich dem anderen ist. Sozusagen.
Blubb.
-
In dem Sinne halte ich aber "macht der Compiler für mich" für optimaler als "mach ich selbst". Und irgendwer muss sowieso prüfen ob schon initialisiert wurde
