Wenn ich einen Knoten in C++ erstelle, muss ich den Operator new
verwenden, um sicherzustellen, dass Speicher zugewiesen werden kann.Wann muss ich den neuen Operator bei der Deklaration von Knoten in C++ verwenden?
Zum Beispiel verwendet diese Funktion new
nicht bei der Deklaration des Knotenzeigers NewNode, der das Ende einer vorhandenen verketteten Liste zum Hinzufügen eines Knotens am Ende der Liste verwendet, verwendet jedoch new
beim tatsächlichen Hinzufügen der Knoten bis zum Ende der Liste. Liegt dies daran, dass der Knotenzeiger als nicht dynamische Speicherzuweisung verwendet wird, die auf anderen Speicher verweist, der bereits dynamisch zugewiesen wurde, oder aus einem anderen Grund? Wäre es inkorrekt, dass Syntax oder Logik das Neue (Notch) vor der NewNode-Deklaration verwenden?
typedef Node* NodePtr; /*a type definition for NodePtr for ease of use in `the larger program this function is a part of*/`
void AddNode(char NewChar, NodePtr List)
{
NodePtr NewNode = List; //make NewNode point to List
while (NewNode->Link != NULL) //find end of linked list
NewNode = NewNode->Link;
NewNode->Link = new (nothrow) Node; //create a new Node at the end of the list
if (NewNode->Link == NULL) //make sure Node was created
return;
NewNode = NewNode->Link; //make NewNode point to the Node just created
NewNode->Ch = NewChar; //fill Ch part of NewNode
NewNode->Link = NULL; //make sure the list ends with NULL
}
void TestAddNode(NodePtr List)
{
char NewChar;
cout << "\n\n---------------- Testing AddNode -------------------\n\n";
cout << "Character to be added? ";
NewChar = cin.get();
cin.ignore();
if (NewChar == '\n') // User pressed just enter key.
{
cout << "Aborting AddNode...";
return;
}
cout << NewChar;
cout << " -- Adding \'" << NewChar << "\'";
AddNode(NewChar, List);
cout << "\n\nThe new list: ";
ShowList(List); //show list is another function that outputs the list
}
Es ist generell keine gute Idee, 'typedef' einen rohen Zeigertyp einzugeben. Es wird prägnanter und präziser mit der Notation '*' oder einer 'Ptr_'-Vorlage bezeichnet. Mit dem 'typedef 'muss man nach einer Definition des Namens suchen. –
'NewNode' wird irreführend benannt. Es ist weder ein neuer Knoten noch ein Zeiger auf einen neuen Knoten. Ein besserer Name wäre nur "p", was nicht mehr bedeutet als dass es ein Zeiger ist. –
ein besserer Name wäre ListIter – Pemdas