Ich versuche, eine List-Klasse mit dem Konzept der verknüpften Listen zu machen, und während ich ursprünglich das C++ - Standard new
Schlüsselwort verwendet habe, entschied ich, es für die C++ 11 std::shared_ptr
zu deaktivieren . Ich kann jedoch nicht das Programm richtig funktionieren, wenn Sie intelligente Zeiger verwenden, wie es abstürzt. Hier sind einige Teile des Codes vor der Änderung:C++ Setzen Zeiger gleich shared_ptr
class List
{
public:
void push_back(...) {
Node *temp = new Node;
...
if (!head) {
head = temp;
return;
}
else {
Node *last = head;
...
last->next = temp;
}
}
...
private:
Node *head = nullptr;
};
Und hier ist, wie es mit dem Wechsel aussieht:
class List
{
public:
void push_back(...) {
std::shared_ptr<Node> temp(new Node);
...
if (!head) {
head = temp.get();
return;
}
else {
Node *last = head;
...
last->next = temp.get();
}
}
...
private:
Node *head = nullptr; // don't need this to be a smart ptr
};
Ich fühle mich wie das Problem sein könnte, dass head
und last
nicht dynamisch zugewiesen und vielleicht müssen sie mit einer shared_ptr
arbeiten, aber ich bin mir nicht sicher. Was genau mache ich falsch und wie kann ich es beheben? Ich hoffe wirklich, dass dies kein Duplikat ist, weil ich nichts finden kann, was mein Problem löst. Vielen Dank.
Edit: Hier ist die Node
Struktur:
struct Node{
int data;
Node* next;
};
Auf den ersten Blick würde ich vermuten, das Problem ist wahrscheinlich die Definition von 'Node' – Assimilater
Nun, es scheint, als ob ich den' temp' Knoten dynamisch zugewiesen werden muss oder sonst das Programm nicht funktioniert, und ich war nur wenn man bedenkt, dass man es dynamisch mit einem 'shared_ptr' statt mit einem Standard' new' teilt. Und ich kann die 'Node'-Struktur veröffentlichen, wenn das hilft. –
ja, die 'Node' struct :) – Assimilater