Pfeiloperator
-
node delete_right(node list){ node tmp = list->next; list->next = list->next->next; // hier liegt mein Problem free(tmp); return list; }Bin grad etwas irritiert. Der Pfeiloperator wird doch eigentlich nur
bei Zeigern verwendet um diesen zu dereferenzieren. Aber list ist doch
kein Zeiger.
-
Das ist ein ganz normaler Operator den man überlagern kann.
-
Ist node vllt. nur ein typedef?
-
struct NonsenseChild { void foo() { std::cout << "hello" << std::endl; } }; class Nonsense { private: NonsenseChild m_child; public: NonsenseChild* operator ->() { return &m_child; } }; int main() { Nonsense nonsense; nonsense->foo(); return 0; }Man kann den Operator überladen

Grüssli
-
Typedef halte ich hier für um Größenordnungen wahrscheinlicher als Überladung.
-
...schließlich müsste sonst noch ein Konvertierungsoperator zum Zeiger existieren, um free verwenden zu können.
-
Bashar schrieb:
Typedef halte ich hier für um Größenordnungen wahrscheinlicher als Überladung.
Beim zweiten hinschauen, bin ich inzwischen auch von der Überzeugung:
free(tmp);Unwahrscheinlich, dass noch ein impliziter Konvertierungsoperator vorliegt, sonst wäre es ein ziemlich hässlicher Code :p
Grüssli
-
aber für was ist denn der punktoperator da.
Versteh ich grad nicht.
-
aha Überladung
-
also verwendet man den Pfeiloperator nur um einen Zeiger zu dereferenzieren.
-
blurry333 schrieb:
also verwendet man den Pfeiloperator nur um einen Zeiger zu dereferenzieren.
Prinizipiell ja, wenn du auch grad nen Zeiger vor der Nase hast.
Iteratoren beispielsweise überladen den Pfeiloperator, um den value, auf den sie grade "zeigen" zurückzugeben. Das iterator-Objekt ist dabei KEIN Zeiger!
Schau auch mal hier rein, wenn dich Operatorüberladung interessiert.