Ich brauche ein shared_ptr
ähnliches Objekt, das aber automatisch ein reales Objekt erzeugt, wenn ich versuche, auf seine Mitglieder zuzugreifen.Gibt es C++ faulen Zeiger?
Zum Beispiel habe ich:
class Box
{
public:
unsigned int width;
unsigned int height;
Box(): width(50), height(100){}
};
std::vector< lazy<Box> > boxes;
boxes.resize(100);
// at this point boxes contain no any real Box object.
// But when I try to access box number 50, for example,
// it will be created.
std::cout << boxes[49].width;
// now vector contains one real box and 99 lazy boxes.
Gibt es eine Implementierung oder sollte ich meine eigene schreiben?
wird es sinnvoll sein, Kind als auto_ptr –
zu enthalten Aber wie würden Sie Boxen [49] -> Breite initialisieren, um einen nicht-trivialen initialisierten Wert (d. H. Nicht 0) zu haben? Sie möchten wahrscheinlich eine Schnittstelle haben, die den Konstruktor für * (Kästchen [49]) seinen Index als Argument erhält, damit er sich von den anderen Kästchen unterscheiden kann. Das bedeutet, dass Sie etwas anderes als std: vector verwenden und Sie in die Domäne spärlicher Vektoren/Matrizen versetzen. –
Sie können boost :: optional anstelle des Kindzeigers verwenden. Die Verwendung von boost :: optional bedeutet, dass Sie von seiner Stack-Zuweisung profitieren. Kein Heap wird verwendet, dann –