Wird (STL-) Klasse innerhalb einer struct bei malloc auch instanziert ?
-
Hallo Zusammen,
ist folgendes möglich (?):
struct tStruktur { int a; int b; list<tAuto> lAutos; };Was ich bräuchte ist nämlich eine Struktur (tStruktur), in der sich weitere Listen mit z.B. Autos befinden.
Warum ich frage ob das geht ? Nun, ich möchte folgendes machen:tStruktur *meineStruktur = (tStruktur*) malloc (sizeof(tStruktur));Jedoch bezweifle ich mal stark, dass der Compiler beim reservieren von Speicherplatz für meine Struktur durch den Aufruf von malloc() erkennt, dass sich in der Struktur eine (STL-) Klasse 'list' befindet und für diese ebenfalls automatisch ausreichend freien Speicherplatz zur Verfügung stellt, bzw. deren Konstruktor aufruft. Versteht ihr was ich meine ?
Alternativ würde ich es halt dann so machen, das sollte dann wohl funktionieren:struct tStruktur { int a; int b; list<tAuto> *lAutos; };und beim Anlegen einer neuen Struktur dann halt so:
tStruktur *meineStruktur = (tStruktur*) malloc (sizeof(tStruktur)); meineStruktur->lAutos = new list<tAuto>;Also weiß jemand, ob erste Methode auch funktioniert ? Ich nehme mal an, es geht nicht...
GreetZ
Xzibit
-
Du hast recht, das geht nicht. Gibt es einen Grund, warum du nicht einfach
tStruktur *meineStruktur = new tStruktur;schreibst?
-
Ääähm.. nö
Da hast du jetzt Recht.
Ich bin halt noch Old-skool und benutze immer noch malloc haha.
Aber 'new' würde auch nix an meiner Lage ändern oder ?
-
new würde in diesem Fall Speicher anfordern und den Konstruktor von tStruktur aufrufen. Der kümmert sich auch um die Membervariablen.
Du musst das ganze nachher aber mit delete freigeben - nicht, dass du das ganze jetzt in free schmeißt.
-
?
Also ich benutze momentan die 2. Variante, mit malloc() und free().
Wieso eigtl. den Konstruktor von tStruktur ? tStruktur hat doch gar keinen oder hab ich jetzt was falsch verstanden...
-
Xzibit schrieb:
Ich bin halt noch Old-skool und benutze immer noch malloc haha.
malloc ist nicht Oldschool, malloc ist C und in C++ quasi immer falsch. Du solltest unbedingt immer new/new[] und delete/delete[] verwenden. Das ist auch keine Frage der persönlichen Präferenz. malloc ist falsch.
_Xzibit schrieb:
Wieso eigtl. den Konstruktor von tStruktur ? tStruktur hat doch gar keinen oder hab ich jetzt was falsch verstanden...
Wird automatisch generiert wenn keiner da ist.
Du solltest dringend ein Anfängertutorial lesen.
-
malloc ist falsch.
Ja, das weiß ich doch. Ich programmiere ja schließlich schon so einige Jahre.
Jedoch macht es bei mir keinen Unterschied mehr, ob malloc oder new.
Läuft genauso duch den COmpiler. Sachlich gesehen ist malloc() hier falsch, da geb' ich dir ja recht. Is ja gut
-
_Xzibit schrieb:
Läuft genauso duch den COmpiler.
Das ist wohl das sinnloseste Argument für falsch oder richtig in der Programmierung überhaupt.
-
Das ist wohl das sinnloseste Argument für falsch oder richtig in der Programmierung überhaupt.
Diskussion ist für mich hier zuende.
-
_Xzibit schrieb:
Das ist wohl das sinnloseste Argument für falsch oder richtig in der Programmierung überhaupt.
Diskussion ist für mich hier zuende.
Super Einstellung!

Das erklärt auch, warum du mit mehreren Jahren Programmierung immernoch solchen C++ Code schreibst.
-
Zitat:
Das ist wohl das sinnloseste Argument für falsch oder richtig in der Programmierung überhaupt.Diskussion ist für mich hier zuende.
Super Einstellung!

Das erklärt auch, warum du mit mehreren Jahren Programmierung immernoch solchen C++ Code schreibst.
Ja, mei

Ich finde eben den kleinen Fehler am Rande auch nicht soo schlimm, daher wollte ich jetzt auch nicht auf eine langwierige Diskussion eingehen... Aber ich werd's mir fürs nächste Mal merken, ich versprech's !
-
_Xzibit schrieb:
Das ist wohl das sinnloseste Argument für falsch oder richtig in der Programmierung überhaupt.
Diskussion ist für mich hier zuende.
^^
int *p; *p = 10; // BUMM!!! int x=10; delete &x; // BUMM!!!Kompiliert wunderbar, geht aber zur Laufzeit sowas von schief! Deine Reaktion ist deshalb wirklich nicht verständlich.
-
_Xzibit schrieb:
Ich finde eben den kleinen Fehler am Rande auch nicht soo schlimm
Statt new malloc zu verwenden ist kein kleiner Fehler am Rande, sondern löst ein ganz anderes Verhalten aus. Malloc ruft keinen Konstruktor auf, new hingegen schon. Das ist ein ganz gewaltiger Unterschied.
-
newunddeletezu verwenden ist oft schon schlimm genug. Besonders an Orten, wo automatische Variablen die massiv bessere Wahl wären.