arr = new unsigned int [5];

Gast #3896867
Lesenswert?

Hallo mal wieder,

der Betreff spiegelt schon wieder, was ich vorhabe.
Ich habe im H-File einen unsigned int Pointer "arr" á la

>volatile unsigned int arrLenght;
>unsigned int* arr;
(Das volatile soll Optimierung für diesen Test verhindern, da es sonst 
im Zweifel als Konstante kompiliert wird, weil keine dynamische 
Anpassung erfolgt)

und im Konstruktor eine Allokierung á la

>arrLenght = 5;
>arr = new unsigned int [arrLenght];

Ich kanns kompilieren, dennoch habe ich "aus dem Dunst heraus" 
Bauchschmerzen. Ist es legitim? Hängt es eventuell von Randparametern 
wie z.B. Compilereinstellungen ab, ob es legitim ist?

viele Grüße!
Gast #3896891
Lesenswert?

Variablen im Header zu definieren ist aber keine gute Idee, denn dann 
hast du 1 Exemplar dieser Variable pro Source-File, die den Header 
inkludiert, und erhälst dann multiple definition errors beim Linken. Es 
sei denn, die Variablen sind Member-Variablen einer Klasse, was du aber 
nicht verrätst...?
Gast #3896916
Lesenswert?

Ja stimmt, es sind Membervariablen. Habe ich da jetzt nen ernsthaften 
Lack? Ich ging davon aus, es währe automatisch der Fall, wenn Variablen 
unter Public/Protected/Private definiert sind (was zugegebener Maßen aus 
meinen Schnippseln nicht hervorgeht).
#3896920
Lesenswert?

Maude schrieb:
> Ja stimmt, es sind Membervariablen. Habe ich da jetzt nen ernsthaften
> Lack?

Das kommt drauf an, wie und wo und warum der new[] überhaupt gemacht 
wird, bzw. wie und wo und warum der delete[] im Code ist.

Aber eines ist sicher: Wenn du kein delete[] zu deinem new[] hast, dann 
hast du ein Speicherleck.

Allerdings kann man auch fragen: warum eigentlich selber allokieren. 
Wenn du schon new verwendest, könntest du das genausogut einer der 
STandard-Klassen überlassen, die sich dann für dich um die 
Speicherverwaltung kümmern. Wie zb ein std::vector oder ein std::array 
oder ....
Denn eigentlich besteht einer der Kunstgriffe in der erfolgreichen C++ 
Programmierung darin, eben nicht sich das Leben dadurch schwer zu 
machen, dass man in einer allgemeineren Klasse Allokierungen durchführt, 
sondern das einer Klasse überlässt, die genau darauf spezialisiert ist.
#3896923
Lesenswert?

Dr. Sommer schrieb:
> Variablen im Header zu definieren ist aber keine gute Idee, denn dann
> hast du 1 Exemplar dieser Variable pro Source-File, die den Header
> inkludiert, und erhälst dann multiple definition errors beim Linken. Es
> sei denn, die Variablen sind Member-Variablen einer Klasse

unabhängig von der Klasse

wäre dann nicht im Header

#ifndef VAR_123
   #define VAR_123 1
   volatile unsigned int arrLenght;
   unsigned int* arr;
#endif

möglich?
#3896930
Lesenswert?

Joachim B. schrieb:

> wäre dann nicht im Header
>
> #ifndef VAR_123
>    #define VAR_123 1
>    volatile unsigned int arrLenght;
>    unsigned int* arr;
> #endif
>
> möglich?

Möglich schon. WÜrde aber nichts ändern.
Du mögest bitte in deinem C Buch über den Unterschied zwischen 
Definition und Deklaration nachlesen, über die One-Definition-Rule und 
welche Rolle dabei das Schlüsselwort 'extern' spielt.
Diese Grundlagen sind in C++ auch nicht anders.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren