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!
Maude schrieb: > Ist es legitim? Ja. Illegitim wird es, wenn Du das "delete" zu dem "new" vergisst ;-)
:
Bearbeitet durch User
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...?
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).
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.
:
Bearbeitet durch User
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?
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.
:
Bearbeitet durch User
Eine Kurzzusammenfassung findet sich auch hier FAQ: Globale Variablen über mehrere Dateien
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.