PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unterschied zwischen malloc() und new ?


Nasenbaer
2002-12-26, 02:00:16
1.)

Hi,
ich lese gerade Band 1 von Stefan Zerbsts "3D Spieleprogrammierung mit C/C++". Im C/C++ Einführungsteil wird die Funktion malloc() zur dynamischen Speicherzuweisung denutzt.
Bislang war mir allerdings das Schlüsselwort "new" für diesen Verwendungszweck bekannt. Worin liegen die Unterschiede und was ist besser?


2.)

Desweiteren ist folgendes Codebeispiel für struct im Buch zu finden:

typedef struct player_type
{
int Lebensenergie;
int Position_x
int Position_y
} PLAYER;

PLAYER Spieler_1;


// Ich hatte es immer so gemacht

struct player_type
{
int Lebensenergie;
int Position_x
int Position_y
};

player_type Spieler_1;


Vorallem das rot markierte versteh ich irgendwie nicht. Aber auch typedef - früher hatte ich es immer weggelassen und es funktionierte auch. Wieso sollte man das nutzen?

Mfg Nasenbaer

Demirug
2002-12-26, 02:05:15
maloc und new machen im Prinzip beide das gleiche beim VC++ laufen sie sogar in der gleichen Funktion zusammen.

Der unterschied liegt ganz einfach darin das man bei C maloc benutzt und bei c++ new. Da aber c++ ja zu c kompatibel ist kann man auch bei c++ programme maloc benutzten.

Der Syntax mit typedef ist ebenfalls eine C "Leiche". Dort musste man das so machen.

Nasenbaer
2002-12-26, 02:10:05
Holla die Waldfee!
Das geht ja mal wieder fix. Danke jedenfalls für die Antwort. Naja dann kann ich ja meinen Stil einfach fortführen und muss mich nicht umgewöhnen. *froi*

Mfg Nasenbaer

Xmas
2002-12-26, 02:23:58
Originally posted by Nasenbaer
1.)

Hi,
ich lese gerade Band 1 von Stefan Zerbsts "3D Spieleprogrammierung mit C/C++". Im C/C++ Einführungsteil wird die Funktion malloc() zur dynamischen Speicherzuweisung denutzt.
Bislang war mir allerdings das Schlüsselwort "new" für diesen Verwendungszweck bekannt. Worin liegen die Unterschiede und was ist besser?


2.)

Desweiteren ist folgendes Codebeispiel für struct im Buch zu finden:

typedef struct player_type
{
int Lebensenergie;
int Position_x
int Position_y
} PLAYER;

PLAYER Spieler_1;


// Ich hatte es immer so gemacht

struct player_type
{
int Lebensenergie;
int Position_x
int Position_y
};

player_type Spieler_1;


Vorallem das rot markierte versteh ich irgendwie nicht. Aber auch typedef - früher hatte ich es immer weggelassen und es funktionierte auch. Wieso sollte man das nutzen?

Mfg Nasenbaer
Der Titel sagt eigentlich schon alles, "3D Spieleprogrammierung mit C/C++".

malloc und diese Verwendung des typedef sind C-Relikte, die man in C++ praktisch nicht mehr braucht.

1.) Der Unterschied zwischen malloc und new ist dass malloc nur einen Speicherbereich der benötigten Größe reserviert, new dagegen legt Objekte an (d.h. inklusive Aufruf des Konstruktors). Das Gegenstück zu malloc() ist free().
Verwende einfach weiterhin nur new und delete, und behalte im Hinterkopf dass es sowas wie malloc und free überhaupt gibt, falls du mal fremden Code lesen musst.

2.) In C muss man, wenn man eine Variable vom Typ "struct xyz" haben will, auch "struct xyz Name;" schreiben. Außer man gibt struct xyz per typedef eine neue Bezeichnung. In C++ ist dieses typedef nicht mehr nötig, "xyz Name;" ist schon ausreichend.
"struct" ist in C++ übrigens dasselbe wie "class", bis auf dass alle Member standardmäßig public sind.

zeckensack
2002-12-26, 16:07:12
Japp. XMas hat fast alles erklärt.
Noch mal ganz kurz hierzu:
Originally posted by Nasenbaer
typedef struct player_type
{
int Lebensenergie;
int Position_x
int Position_y
} PLAYER;

PLAYER Spieler_1;


// Ich hatte es immer so gemacht

struct player_type
{
int Lebensenergie;
int Position_x
int Position_y
};

player_type Spieler_1;
Oben wird
1)Die struct player_type definiert
2)Die struct player_type mittels typedef auch als Typ PLAYER dem Compiler bekannt gemacht
3)Die Variable des Typs PLAYER (gleicher Typ wie struct player_type) mit dem Namen Spieler_1 definiert.

Das untere ist gleichwertig, aber
1)es ist nur innerhalb eines C++ Moduls legal (C-Compiler sagen "Hä, was?")
2)PLAYER, als Synonym von player_type wird nicht definiert

Nasenbaer
2002-12-26, 16:30:44
Originally posted by zeckensack
es ist nur innerhalb eines C++ Moduls legal (C-Compiler sagen "Hä, was?")


Naja da ich so'nen Mix aus C und C++ programmiere, d.h. nicht in jedem Falle Klasse zusammenbastel, muss ich sowieso alle als C++ kompilieren. In sofern stört mich das nicht weiter. :)

Mfg Nasenbaer