Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Das ist nicht ganz richtig. Eine Referenz muss ein existierendes Objekt referenzieren. Ein Zeiger dagegen nicht (Zum Beispiel zeigt der Nullzeiger nie auf ein existierendes Objekt).Zitat von »"helium"«
Ein Pointer/Zeiger ist ein Verweis irgendwo hin. Er kann nur auf schon existierende Objekte zeigen.
Da fehlt ein &Zitat von »"helium"«
C-/C++-Quelltext
1 Foo * verweis = objekt1; // "verweis" zeigt nun auf objekt1.
C-/C++-Quelltext |
|
1 |
Foo * verweis = &objekt1; // "verweis" zeigt nun auf objekt1. |
Dazu sollte man noch sagen dass sowas sehr gefährlich sein kann, da man das zurückgelieferte Objekt mit delete zerstören muss und dies ist nicht so offensichtlich wenn man so eine Funktion aufruft. Deswegen stürzt das Programm zwar nicht ab aber Ressourcenlecks sollte man trotzdem nicht auf die leichte Schulter nehmen.Zitat von »"helium"«
C-/C++-Quelltext
1 2 3 4 Foo * erzeugeEinFoo () { return new Foo(); }
Zitat von »"helium"«
Statische Instanzierung sieht so aus:
Zitat von »"helium"«
new Foo() legt irgendwo ein Objekt an, also eine Instanz des Typs Foo.
Zitat von »"helium"«
C-/C++-Quelltext
1 2 3 4 5 Foo * erzeugeEinFoo () { Foo * temp = new Foo(); return temp; }
C-/C++-Quelltext
1 2 3 4 Foo * erzeugeEinFoo () { return new Foo(); }
Zitat von »"big_muff"«
Das ist nicht ganz richtig. Eine Referenz muss ein existierendes Objekt referenzieren. Ein Zeiger dagegen nicht (Zum Beispiel zeigt der Nullzeiger nie auf ein existierendes Objekt).
C-/C++-Quelltext |
|
1 2 |
foo* p = NULL; foo& ref = *p; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
std::auto_ptr< foo > bla() { return std::auto_ptr< foo >( new foo ); } // ... std::auto_ptr< foo > blubb = bla(); |
Zitat von »"Reboot"«
Die Pointer-Arithmetik habe ich schon verstanden, mich hatte nur diese Schreibweise bei Allegro verwirrt. :oops:
Administrator
Zitat von »"Chase"«
Zitat von »"helium"«
aus:
C-/C++-Quelltext
1 2 3 4 Foo objekt1; Foo objekt2; Foo * verweis = objekt1; // "verweis" zeigt nun auf objekt1.
Bitte was ? Schon mal das Zeichen & gesehen ??
Foo &ref = objekt1;
oder
Foo *pnt = &objekt1;
Bitte pass auf wenn du was erklaerst!
Zitat von »"big_muff"«
Das ist nicht ganz richtig. Eine Referenz muss ein existierendes Objekt referenzieren. Ein Zeiger dagegen nicht (Zum Beispiel zeigt der Nullzeiger nie auf ein existierendes Objekt).Zitat von »"helium"«
Ein Pointer/Zeiger ist ein Verweis irgendwo hin. Er kann nur auf schon existierende Objekte zeigen.
Zitat von »"big_muff"«
Da fehlt ein &Zitat von »"helium"«
C-/C++-Quelltext
1 Foo * verweis = objekt1; // "verweis" zeigt nun auf objekt1.
C-/C++-Quelltext
1 Foo * verweis = &objekt1; // "verweis" zeigt nun auf objekt1.
Dazu sollte man noch sagen dass sowas sehr gefährlich sein kann, da man das zurückgelieferte Objekt mit delete zerstören muss und dies ist nicht so offensichtlich wenn man so eine Funktion aufruft. Deswegen stürzt das Programm zwar nicht ab aber Ressourcenlecks sollte man trotzdem nicht auf die leichte Schulter nehmen.Zitat von »"helium"«
C-/C++-Quelltext
1 2 3 4 Foo * erzeugeEinFoo () { return new Foo(); }
Zitat von »"David_pb"«
Zitat von »"helium"«
Statische Instanzierung sieht so aus:
Wie kommst du nochmal auf statisch?
Zitat von »"David_pb"«
Zitat von »"helium"«
new Foo() legt irgendwo ein Objekt an, also eine Instanz des Typs Foo.
Ned irgendwo, sondern auf dem Heap. Das sollte wohl durchaus erwähnt werden.
Zitat von »"David_pb"«
Zitat von »"helium"«
C-/C++-Quelltext
1 2 3 4 5 Foo * erzeugeEinFoo () { Foo * temp = new Foo(); return temp; }
C-/C++-Quelltext
1 2 3 4 Foo * erzeugeEinFoo () { return new Foo(); }
Sowas ist natürlich hochgefährlich. Da die Freigabe des reservierten Speichers nich garantiert ist. Sowas sollte also lieber vermieden werden, oder durch eine gute Lösung ersetzt werden.
Zitat von »"David_pb"«
Zitat von »"big_muff"«
Das ist nicht ganz richtig. Eine Referenz muss ein existierendes Objekt referenzieren. Ein Zeiger dagegen nicht (Zum Beispiel zeigt der Nullzeiger nie auf ein existierendes Objekt).
Und was ist damit?
C-/C++-Quelltext
1 2 foo* p = NULL; foo& ref = *p;
*hust* das war natürlich nur ein Scherz. Bitte, bitte meidet jegliche Art von Lebewesen die so einen Unsinn tatsächlich, gewollt fabrizieren!
Zitat von »"David_pb"«
Aaaalso... Wo war ich? Achja... Wenn man nich unter enormer Resourcenknappheit leidet lohnen sich meist Smartpointer. Das sind Objekte die intern einen Zeiger auf ein gewünschtes Objekt halten und sich auch in der Handhabung genau wie zeiger verhalten.
Zitat von »"Reboot"«
Die Pointer-Arithmetik habe ich schon verstanden, mich hatte nur diese Schreibweise bei Allegro verwirrt.
Zitat von »"Reboot"«
Also es gibt da ne Klasse BITMAP und ich setze immer einen Pointer auf BITMAP. Aber ich Instanziere BITMAP nie, warum?
[...]
Warum instanziert man im folgenden Fall nicht einfach BITMAP?
Administrator
Zitat von »"helium"«
War die Frage, warum "LoadBitmap (blablabla)" anstelle von z.B. "new BITMAP(blablabla)"?
Werbeanzeige