Werden Arrays of pointers zuverlässig mit NULL initialisiert?
-
@SeppJ sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
[...]
Kurz und für diesen Fall auf den Punkt:
std::array<>
ftw.
-
@Swordfish sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
@SeppJ sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
[...]
Kurz und für diesen Fall auf den Punkt:
std::array<>
ftw.Das klingt nicht nach einem statischen Anwendungsfall:
@daniel sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
@Wade1234 Das ist in dem Fall nicht möglich, weil ein Array nach Objekten, die gezeichnet werden sollen, durchsucht wird. Und das Array wird durch vom User kreierte Events gefüllt.
Also, wie fast immer,
std::vector
. Ist nicht ohne Grund die erste Wahl für Container bis zum Beweis des Gegenteils.Dann fallen höchstwahrscheinlich auch direkt Nullpointer und Pointer allgemein raus, da man keinen Mechanismus mehr braucht, um ungefüllte Werte zu markieren. Und deshalb schrieb ich irgendwo ganz oben mal, dass Arrays, Pointer und NULL allesamt Zeichen sind, dass man in C++ etwas falsch macht.
-
@daniel sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
@SeppJ Ich weiß schon, dass man immer die STL nutzen soll, aber wenn man es in C so machen kann, geht es doch auch in C++?
Nur weil es geht, ist es noch lange nicht gut. Man kann vieles tun, und einiges akzeptiert der Compiler sogar. Aber bei professioneller Softwareentwicklung geht es nicht mehr darum, dass man etwas "irgendwie macht", sondern dass man etwas mit möglichst geringer Fehlerquote umsetzt. Und die Fehlerquote ist bei C-C++-Mischmasch erfahrungsgemäß höher als wenn man etwas sauber mit der STL umsetzt und bewährte Konzepte nutzt.
Fehlersuche ist teilweise sehr aufwändig und kostet Zeit. Daher ist es immer eine gute Idee von vornherein zu versuchen, die Fehlerquote zu minimieren.
-
Es reicht sogar
int* arr[N] = {};
Das ist in C ein Syntaxfehler.
Es passiert immer wieder, dass in C++ irgendwelche Annahmen getroffen werden, aus der "Erfahrung" heraus, es ist ja bisher immer gut gegangen.
-
@Wutz Nachdem wir hier im C++ Unterforum sind und nicht im C: OK. So what?
-
@hustbaer Die Leute (Anfänger und von Professoren betrogene) kommen alle an und sagen, das C++ auf C aufbaut.
In C++ brauchen wir keine Zeiger.
In C++ brauchen wir keine Arrays aus Zeigern.Wir haben Inhalte. Dort, wo wir keine Inhalte haben gibt es auch nichts zu speichern. Fertig.
-
-
Ich glaube, sogar die STL macht Gebrauch von Zeigern?
Oder ist die nicht in C++ geschrieben?
-
Ich denke es war gemeint für's alltägliche Programmieren mit guten Bibliotheken. Natürlich braucht man die zur Implementierung von einigen Datenstrukturen und/oder Algorithmen. War aber zugegeben unglücklich formuliert, und Informatiker nehmen nunmal alles sehr genau
-
@HarteWare mir ging es darum, das wir in C++ nicht mit new und delete hantieren müssen. Damit hab ich mir nämlich am meisten in den Fuß geschossen als ich noch ausschließlich ich mit C zu tun hatte. Gerade wenn man wie ich von C kommt, ist das eine ziemlich befreiende Erkenntnis. Für mich zumindest. Deshalb will ich damit auch nicht mehr viel programmieren müssen. Stichwort: Fehlervermeidung.
-
@daMicha
Ohh Mann ihr nehmt es aber genau hier. Natürlich arbeitet die C++ STL mit Zeigern. Haaach, wie erkläre ich das am besten?Egal welche Programmiersprache: wir arbeiten mit einem binären System.
Die geschlossene Faust bedeutet 0. Der erhobene Mittelfinger bedeutet, das z.B. das Carry-Flag gesetzt ist. Mit dem (C) NULL-Pointer muss ich unter Umständen abfragen, ob der Wert 0 ist oder was anderes und dann erst, welcher Finger nach oben zeigt.
Mit C++ kann ich dieses "Problem" elegant umgehen, weil der nicht erhobene Mittelfinger gar nicht erst auftaucht in meinem Array. Je nachdem.
-
@Belli sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
Ich glaube, sogar die STL macht Gebrauch von Zeigern?
Oder ist die nicht in C++ geschrieben?Doch. Aber die STL wurde millionenfach getestet und von allen Seiten strapaziert und abgeklopft. Deswegen ist die, nach meinem bisherigen Stand frei von Fehlern.
Wenn man selbst hingeht und mit Zeigern rumwurschtelt, erzeugt man Quellcode, der eben nicht zwangsläufig frei von Fehlern ist. Die Fehlerquote ist allein durch die Nutzung von Zeigern schon erhöht. Abgesehen davon sind Zeiger unpraktischer als Referenzen oder die Instanzen selbst.
-
@It0101 sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
bla bla bla ...
Die Aussage war:@daMicha sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
In C++ brauchen wir keine Zeiger.
Und das stimmt SO nicht!
-
@daMicha sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
Haaach, wie erkläre ich das am besten?
Lass mal lieber ...
@daMicha sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
Mit C++ kann ich dieses "Problem" elegant umgehen, weil der nicht erhobene Mittelfinger gar nicht erst auftaucht in meinem Array. Je nachdem.
Das hat nichts miteinander zu tun; ob ich nicht initialisierte Werte speichere oder nicht, hängt von den Anforderungen der Anwendung ab. Wenn ich das nicht will, kann ich auch in C ein dynamisches Array benutzen, analog zum C++ vector.
-
@Belli sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
@It0101 sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
bla bla bla ...
Die Aussage war:@daMicha sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
In C++ brauchen wir keine Zeiger.
Und das stimmt SO nicht!
Was er sagen wollte ist: In C++ benötigen wir als Anwender keine Zeiger.
Ich brauche die auch nur in Ausnahmefällen, z.B. wenn ich mit C-basierten APIs arbeite. Aber sonst eigentlich nicht. Kann mich zumindest an keinen Fall erinnern, wo ein roher Zeiger die beste Lösung war.@Belli: fällt dir was ein?
-
Wenn er das sagen wollte, hätte er es ja tun können. Warum soll ich unterstellen, dass er was anderes meint?
Und ich führe hier keine Diskussion darüber, ob ein roher Zeiger die beste Lösung ist. Als ich mit C++ begonnen habe, war er oft die einzige Lösung, deshalb habe ich gelernt, damit umzugehen.
Das schult hervorragend darin, seinen Code vernünftig zu organisieren.Und bitte jetzt nicht behaupten: Belli wollte sagen, dass er rohe Zeiger benutzt - das habe ich nämlich nicht gesagt!
-
@Belli sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
Wenn er das sagen wollte, hätte er es ja tun können. Warum soll ich unterstellen, dass er was anderes meint?
Das war aber sehr deutlich formuliert von ihm und man muss schon ganz schön pingelig sein, um das nicht zu verstehen.
-
Okay, ich sag meine Meinung auch noch mal deutlich:
Wir brauchen Zeiger in C++.
Warum?
Weil das der Rückgabewert von Funktionen ist, die Speicher bereitstellen. Ohne Zeiger keine dynamische Speicherverwaltung, ohne dynamische Speicherverwaltung kein Vektor, keine Liste, etc.Dass man die Zeiger dann in Smartpointer kapseln kann, ist prima. Aber wenn ich einen Smartpointer will, brauch ich auch erst mal einen Zeiger, was soll der Smartpointer sonst kapseln ...
Ich kann auch nicht sagen, Autos brauchen keine Kolben (die sind ja im Motor gekapselt)
-
Und doch konnte jeder von uns sofort erkennen, dass der Threadersteller kein korrektes C++ macht, und das konnten wir unter anderem daran erkennen, dass er Zeiger so nutzte, wie er sie nutzte.
-
@Belli sagte in Werden Arrays of pointers zuverlässig mit NULL initialisiert?:
Ich kann auch nicht sagen, Autos brauchen keine Kolben (die sind ja im Motor gekapselt)
Wenn du über die Phase des Korinthenkackens hinaus bist, sag Bescheid.