Klasse einbinden - !
-
@manni66 Ups, bin bereits ein wenig verwirrt. So viele unterschiedliche Fragen...
-
@torsten_156 sagte in Klasse einbinden - !:
@Schlangenmensch sagte in Klasse einbinden - !:
@torsten_156 und was liefer
new
zurück?eine neue Instanz auf das Objekt Reader...
Es erstellt eine neue Instanz, aber was liefert es zurück? Hinweis: Es könnte mit einer vorherigen Frage zusammenhängen bezüglich dem Unterschied zwischen
Reader
undReader*
-
@Dravere Es liefert einen Zeiger auf den Datentyp
Reader
zurück. Dabei wird auch der benötigten Speicher reserviert. Dieser muss nach Beendigung dann mit delete wieder freigegeben werden. Soweit richtig?Gruß
Torsten
-
@torsten_156 sagte in Klasse einbinden - !:
@Dravere Es liefert einen Zeiger auf den Datentyp
Reader
zurück. Dabei wird auch der benötigten Speicher reserviert. Dieser muss nach Beendigung dann mit delete wieder freigegeben werden. Soweit richtig?Soweit richtig. Nun denk noch einmal scharf nach, wieso manni66 wohl folgendes sagte:
@manni66 sagte in Klasse einbinden - !:
@torsten_156 sagte in Klasse einbinden - !:
Reader myReader = new Reader();
Der Unterschied zwieschen
Reader
undReader*
ist dir klar?Da hat er bestimmt einen Grund für gehabt.
Über den von manni66 angesprochenen syntaktischen Fehler hinaus, sollte man noch unbedingt erwähnen, dass man in C++ ohnehin niemals
new
im Anwendungscode benutzt. Das würde ich fast schon als krassen Fehler bezeichnen. Zu viel Java gemacht?
-
@torsten_156 sagte in Klasse einbinden - !:
@Th69 Ja diese meine ich. Der
MultiBarcodeReader
hört sich ja gut an. Aber wie binde ich diesen in mein Projekt ein???Du bist wahrscheinlich durch die VCL daran gewöhnt, Objektinstanzen per
new
anzulegen, aber der Standard ist die direkte Erstellung eines Objekts (auf dem Stack):MultipleBarcodeReader multipleBarcodeReader;
s.a. cli/src/main.cpp (auch wenn hier ein
GenericMultipleBarcodeReader
angelegt wird)
-
@SeppJ
Nö, vermutlich zuviel Embarcadero VCL Scheiß gemacht. Deren Framework erfordert, dass alles, was vonTObject
erbt, auf dem Heap angelegt werden muss. Ausnahmslos. Um das weiter zu erschweren funktionieren auchmake_shared
undmake_unique
nicht mit dem VCL Framework zusammen, da bleibt nur noch die Konstruktion übernew
.
-
@DocShoe sagte in Klasse einbinden - !:
@SeppJ
Nö, vermutlich zuviel Embarcadero VCL Scheiß gemacht. Deren Framework erfordert, dass alles, was vonTObject
erbt, auf dem Heap angelegt werden muss. Ausnahmslos. Um das weiter zu erschweren funktionieren auchmake_shared
undmake_unique
nicht mit dem VCL Framework zusammen, da bleibt nur noch die Konstruktion übernew
.Leute wissen davon und benutzen das trotzdem?
-
Ist ja bei Qt nicht anders, alle visuellen Elemente werden als Childobjekte einem Parent zugewiesen und bei Zerstörung des Parents werden automatisch alle Unterelemente (rekursiv) per
delete
entfernt.
-
@SeppJ
Ich könnte mich jetzt lange über den Mist auskotzen, aber ich belasse es mal bei der Kurzfassung:
Wenn du (aktuell am 19.09.2019) €2628,90 für die Suite ausgegeben hast und dann beim ersten Projekt feststellst, dass das halt so ist, dann findet man sich damit ab.
-
@Th69 Durchaus grausam Versuche mir da nichts falsches anzugewöhnen ... auf der anderen Seite hat es mir aber auch geholfen, mich nicht vor pointern zu fürchten
-
@Th69
Bei GUI Elementen kann ich das noch verstehen, aber es gibt keinen, aber auch wirklich gar keinen Grund, warum eineTStringList
(eine Artstd::vector
für Strings) auf dem Heap erzeugt werden muss.
-
Wären diese VCL-Komponenten nicht alle von
TObject
abgeleitet, könnte man keinen Code zwischen C++ und Delphi austauschen (also in einem gemeinsamen Projekt verwenden). Einzig wohl die KlassenAnsiString
undUnicodeString
wurden für C++ neu implementiert (und können daher direkt ohnenew
benutzt werden).