Ich stehe vor einer Design-Entscheidung für eine einfach verknüpfte Listenklasse. Die grobe Idee:Anzahl der shared_ptrs in persistenter Datenstruktur reduzieren
template<typename T>
class List {
public:
...
private:
struct Node {
std::shared_ptr<const T> value;
std::shared_ptr<const Node> next;
};
std::shared_ptr<const Node> node_;
};
Ja, ich kenne eine Menge shared_ptr
s gibt es umher, aber das ist, weil List
eine funktionelle persistente Datenstruktur, die so viel strukturelle Teilung wie möglich benötigt. In dieser Implementierung müssen zum Beispiel beim Umkehren einer Liste keine Elemente kopiert werden, und mehrere Listen können eine gemeinsame Unterliste teilen (indem sie auf denselben shared_ptr
Endabschnitt verweisen).
Das gesagt, ich fühle immer noch, es gibt vielleicht zu viele shared_ptr
s. Gibt es trotzdem die Möglichkeit, die Anzahl der verwendeten zu reduzieren, während strukturelles Teilen weiterhin möglich ist? Etwas wie die Kombination der beiden shared_ptr
s innerhalb einer Node
, um den Overhead von Kontrollblöcken zu reduzieren ... Ich weiß nicht, vielleicht gibt es keinen Weg, oder vielleicht gibt es. Jede Idee ist willkommen, sogar über die Neugestaltung der List
Klasse insgesamt.
Kann ein Knoten kein T kapseln? –
@RichardHodges Können Sie das näher erläutern? –
Warum nicht ein einfaches 'T' Mitglied? –