Du bist nicht angemeldet.

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

NoName

Treue Seele

  • »NoName« ist der Autor dieses Themas

Beiträge: 118

Beruf: Student

  • Private Nachricht senden

1

09.10.2003, 17:24

"int* Arg" oder "int& Arg"?

Hi!

Was ist besser, wenn man das Argument einer Funktion verändern will, z.B.:

Quellcode

1
2
3
4
void ZeroValue (const int* Arg)
{
(*Arg) = 0;
}
oder

Quellcode

1
2
3
4
void ZeroValue (int& Arg)
{
Arg = 0;
}

?? ?? ??

2

09.10.2003, 18:18

Ich tendiere hier zur Referenz, da hier dann keine Dereferenzierung notwendig ist.

Nur wenn man C Kompatible bleiben möchte, ist der Pointer die richtig Wahl.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Aeroflare

Frischling

Beiträge: 53

Wohnort: In front of my PC...

  • Private Nachricht senden

3

09.10.2003, 18:20

Also in der Schule haben wir gelernt mit Pointer, hat sicher seine Gründe ;)
Ich verwahre in positiver Hoffnung auf eine erfreuenswerte Antwort

4

09.10.2003, 18:39

Ja ich hab auch gelernt mit Pointer. Pointer sind ja auch nicht Falsch. Was ich ja auch nicht gesagt habe.

Ich benutze allerdings lieber Referenzen, da diese einfacher zu behandeln sind. Das fängt schon beim Funktionsaufruf an und man muss in der Funktion nicht immer *pointer oder pointer->blabla schreiben.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

5

09.10.2003, 18:48

Wenn du einfach nur eine Variable verändern möchtest, die du als Parameter übergibst, solltest du Refernzen, also int &arg benutzen.

Denn Refernzen sind in diesem Fall einfacher zu handhaben und vermeiden somit Fehler.

Ciao DarthB :huhu:

Jens

Treue Seele

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

6

10.10.2003, 00:39

Pointer oder Referenzen

also ich habe noch nie ein Argument dafür oder dagegen gehört, aber ich benutze Referenzen dann, wenn z. B. ein Parameter unbedingt übergeben werden soll, der in der Funktion gesetzt wird.
Pointer hingegen können auch NULL sein (z. B. Standardparameter NULL), also sollte man sie mit ASSERT oder if (ptr != NULL) abfragen.
Bis später...

7

10.10.2003, 00:50

Referenzen sind auch sehr nützlich wenn man Typen als Parameter hat die größer als 4 Byte sind. Z.B. Klassen oder Strukturen, wo dann ja noch der Kopierkonstruktor zusätzlich aufgerufen wird. Zwar gilt das auch noch für Zeiger, aber bei Zeigern kann man z.B. nich so was machen

Quellcode

1
2
3
4
5
6
void foo(const vector2d& v)
{
  ....
}

foo(vector2d(1.0f, 2.0f));
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Jens

Treue Seele

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

8

10.10.2003, 09:35

Kopierkonstruktor

Hi DragonMaster,
jetzt verstehe ich nicht ganz, warum das mit Zeigern nicht geht:
foo(const vector* pVec);
foo(&vector(2.0f,1.0f);

Es wird sicher doch ein temporäres vectorobjekt erstellt, welches dann im Kopierkonstruktor entweder eine Referenz oder eben eine Adresse darauf erhält.

Übrigens, ich mach für jede eigens erstellte Klasse immer eine Methode Assign(const CObj* pObj) als Kopiermethode rein.
Die wird im leeren Konstruktor mit Parameter NULL (Init) und im Kopierkonstruktor mit der Adresse auf das zu kopierende Objekt aufgerufen.
Damit muss ich nicht immer ein neues Object erstellen, sondern kann ein bestehendes neu setzen und z. B. in eine Liste anhängen.
Wenns sehr viele Einzelobjekte sind, glaube ich, damit viele Speicher-Fragmentierungen einzusparen.
Bis später...

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

9

10.10.2003, 14:11

@Jens:
Meinst du Object Pooling?

http://www.brent.worden.org/articles/1999/objectPools.html

10

10.10.2003, 14:16

Stimmt hast recht, hab es grad getestet. Dachte das es nicht gehen würde. Man lernt ja nie aus ;D
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige