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

Anonymous

unregistriert

1

09.08.2003, 17:55

Initialisierung von Strukturen

Werden bei der Initialisierung einer Struktur durch new alle Elemente auf 0 gesetzt?

2

09.08.2003, 18:03

Nein das werden sie nicht. Die Werte sind zufällig. Was halt grad im Speicher steht. Dafür gibt es Konstruktoren. Einfach den Standardkonstruktor erstellen, der dann alle Elemente auf NULL setzt.

PS: Gehört eigentlich in das C++ Forum ;)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

3

10.08.2003, 13:48

Verwende lieber Klassen! Strukturen sind veraltet und in C++ nicht gern gesehen!
Dort erstellst du dann auch den Standardkonstruktor.

Quellcode

1
2
3
4
5
6
7
8
9
class Klasse
{
public:
    Klasse() {Var1 = 0; Var2 = 0;}; //Standardkonstruktor

private:
    int Var1;
    int Var2;
};
Ein Gespenst geht um in Europa...

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

4

10.08.2003, 14:11

@_progger_
Genau jedoch dein Standardkonstruktor kann etwas naja wie soll man sagen? Schneller werden ;)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// ##################################
// Methode 1
class Klasse 
{ 
public: 
    Klasse() 
    {
        Var1 = 0; 
        Var2 = 0;
    } //Standardkonstruktor 

private: 
        int Var1; 
        int Var2; 
}; 

// ##################################
// Methode 2
class Klasse 
{ 
public: 
    Klasse(void) : Var1 (0), Var2 (0)
    {
    } //Standardkonstruktor 

private: 
        int Var1; 
        int Var2; 
}; 


Methode 1 ist zwar schön und gut, aber Methode 2 ist schneller :) Da der Rumpf des Konstruktors sogesehen unberührt bleibt und die Variablen innerhalb des KonstruktorHeaders gesetzt werden. :) Es muss also "primitiv" gesagt nicht auf die Objekte zugegriffen werden wie in Methode 1 :)

5

10.08.2003, 15:22

Patrick weiß es immer besser, bäh, bäh :-D
Ein Gespenst geht um in Europa...

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

6

10.08.2003, 15:24

;D;D

Anonymous

unregistriert

7

11.08.2003, 01:52

Methode 2 ist in diesem Fall überhaupt nicht schneller

8

11.08.2003, 02:42

Man sollte die Initialisierungsliste dem Funktionsrumpf immer vorziehen. Bei Variablen dürfte das zwar keinen Unterschied machen, aber wenn Strukturen oder Klassen dabei sind, ist es auf jeden fall schneller. Da der Standardkonstruktor in der Initialisierungsliste immer aufgerufen wird.

In einem Buch hab ich auch gelesen das es vorteilhaft ist, das man auf die Reihenfolge in der Initialisierungsliste achtet. Ausgehend von "Methode 2" also immer erst Var1 und dann Var2 und nicht umgedreht. Die Begründung war das dadurch Speichersprünge bei der Initialisierung verhindert werden.

PS: Fragt mich aber jetzt nicht in welchem Buch das stand. Auf jedenfall hat es einen Vorteil. Variablen lassen sich dadurch in der Liste schneller finden ;)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

9

11.08.2003, 09:08

Hmmmm,

Hmmm,

klingt alles interessant. Optimiere selber meine progs recht intensiv.

Die Tipps gelten meiner Einschätzung nach aber immer nur für spezielle Compiler, jeder Compiler generiert doch bestimmt seine eigenen ASM-Strukturen und Optimierungen - könnte mir vorstellen, daß es da sogar Unterschiede bei den verschiedenen Versionen gibt. Gibt ja auch Leute, die nicht auf VC von MS setzen ;-)

Irre ich mich?

Gruß

10

11.08.2003, 09:21

Sowas...

Zitat von »"_progger_"«

Verwende lieber Klassen! Strukturen sind veraltet und in C++ nicht gern gesehen!


Wer sacht'n sowas? Das einzige was man den "structs" ankreiden kann ist, daß per Default alle Elemente public sind, was gegen die Datenkapselung verstößt - Intern werden Sie wie Klassen behandelt, können ja auch Methoden etc. haben. (Was wiederum auch nicht richtig ist, intern wird nach meinem Wissen c++ sowieso in c übersetzt).

Korrigiert mich wenn ich unsinn schreibe!

Gruß

Werbeanzeige