Ich habe in meinem Projekt zwei Klassen für die Verwaltung von Speicher: MemoryStorage
und MemoryFile
.Ersetzen einer Singleton-Lösung für einen Speichermanager in C++
Die erste funktioniert ähnlich wie eine Festplatte und hält MemoryFiles
(Dateien, Verzeichnisse, etc.) mit einem Singleton (hinzufügen, entfernen, frei, etc). Die zweite funktioniert wie fstream
, aber für den Speicher (Öffnen, Schließen, Schreiben, Lesen, etc.).
Anwendungsbeispiel
MemoryFile file(&MemoryStorage);
// Open file in write mode
if (file.open("filename", open_mode::out)) {
// Data file
int* obj = new int;
*obj = 0;
// Write in internal buff
file.write(obj, sizeof(int));
delete obj;
// Put buff in MemoryStorage and clear buff
file.close();
}
// Other moment
// Open file in read mode
if (file.open("filename", open_mode::in)) {
// Data file
int* obj = new int;
// Write in internal buff
file.read(obj, sizeof(int));
cout << *obj << endl; // Print: 0
delete obj;
// Put buff in MemoryStorage and clear buff
file.close();
}
Wenn ich nicht mit einem Singleton, Dateien mit dem gleichen Namen im Speicher möglich sein wird erstellen, zu einem inkonsistenten Dateisystem führt.
Ich habe mehrere Artikel im Stapelüberlauf wie this one gelesen, die darüber sprechen, wie Singleton ist schlechtes Muster nach vielen Programmierern.
Wie kann ich das obige Programmierproblem ohne ein Singleton-Muster lösen? Benütze ich einen privaten statischen Member in MemoryStorage
, der den Effekt eines Singleton repliziert?
das Dateisystem * ist * ein Singleton –