Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DarkFitzi

Alter Hase

Beiträge: 608

Wohnort: Eisenberg, Thüringen

Beruf: Schüler, 10te Klasse

  • Private Nachricht senden

11

12.09.2005, 15:13

hab die Speicherbereiche mit TB_SAFE_DELETE freigegeben. haut auch hin und ich bekomm keine Warnung aber wo ist da eigentlich der unterschied?
und warum verwendest du static_cast? es geht doch auch so: (wie von kaid geschrieben)

C-/C++-Quelltext

1
int* var = (int*)tbMemAlloc(1000 * sizeof(int));

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

12

12.09.2005, 15:28

Zitat von »"DarkFitzi"«


und warum verwendest du static_cast? es geht doch auch so: (wie von kaid geschrieben)

C-/C++-Quelltext

1
int* var = (int*)tbMemAlloc(1000 * sizeof(int));


Weil das die alten C-Casts sind.
Generell sollte man in C++ nur mehr static_cast, reinterpret_cast, dynamic_cast usw. verwenden.

mfg Philipp

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

13

12.09.2005, 15:36

Und was macht die alten cast so viel schlechter?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

DarkFitzi

Alter Hase

Beiträge: 608

Wohnort: Eisenberg, Thüringen

Beruf: Schüler, 10te Klasse

  • Private Nachricht senden

14

12.09.2005, 15:48

wie jetzt???
sollte man casts nun mehr oder weniger verwenden in C++?
ich wollte einfach nur noch mal drauf hinweisen, dass es auch anders geht :wirbel: :huhu: :angel:

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

15

12.09.2005, 15:48

Zitat von »"Nox"«

Und was macht die alten cast so viel schlechter?

Nichts!

Laut msdn heißt es aber:

Zitat


These operators are intended to remove some of the ambiguity and danger inherent in old style C language casts


Natürlich kann jeder der will auch die alten Casts verwenden (mir ists auf jeden Fall egal ;p ) , ich verwende sie zwischendurch auch immerwieder (bin schreibfaul ;) ).

mfg Philipp

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

16

12.09.2005, 15:51

Zitat von »"DarkFitzi"«


sollte man casts nun mehr oder weniger verwenden in C++?


Wie meinst du das ???
Cast verwendet man wenn sie benötigt werden

mfg Philipp

17

12.09.2005, 16:16

Zitat von »"DarkFitzi"«

hab die Speicherbereiche mit TB_SAFE_DELETE freigegeben. haut auch hin und ich bekomm keine Warnung aber wo ist da eigentlich der unterschied?


Glaub der Unterschied liegt in der Behandlung im Speichermanager.
Reserviert man mit tbMemAlloc Speicher wird der in einer verketteten Liste eingetragen und verwaltet. Um den Eintrag wieder aus der Liste zu entfernen muss man dann tbMemFree aufrufen und nicht delete, welches den Speicher freigeben würde ohne ihn beim Speichermanager abzumelden. Das Makro TB_SAFE_DELETE ruft delete auf und setzt danach den Zeiger auf NULL, wohingegen TB_SAFE_MEMFREE statt delete tbMemFree aufruft und somit beim Speichermanagement abmeldet. Das du dann keine Warnungen bekommst ist komisch, da die Bereiche ja eigentlich als nicht freigegeben in der Liste verwaltet werden müssten. Hatte noch nie ne Warnung vom Speichermanager, vielleicht wurde es vergessen zu implementieren...

DarkFitzi

Alter Hase

Beiträge: 608

Wohnort: Eisenberg, Thüringen

Beruf: Schüler, 10te Klasse

  • Private Nachricht senden

18

12.09.2005, 16:29

stimmt hab mich im buch verguckt... :o
also wenn man z.b. eine virtuelle Datei reserviert und dann freigibt, sollte man TB_SAFE_DELETE anwenden und wenn man z.b. eine int variable dynamisch reserviert soll das mit TB_SAFE_MEMFREE gemacht werden

@ Phill_GDM
ich meine gerad in diesem beispiel gibt es doch 2 verschiedene möglichkeiten die 1000 int variablen zu reservieren...
so:

C-/C++-Quelltext

1
int* var = (int*)tbMemAlloc(1000 * sizeof(int));  

und so:

C-/C++-Quelltext

1
 int *var = static_cast<int*>(tbMemAlloc(1000 * sizeof(int))); 


doch welche der beiden Varianten ist die Besser oder sind beide gleich?
Ich würde die Welt gern verbessern, doch Gott gibt mir den Sourcecode nicht! :-(

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

19

12.09.2005, 16:36

Ich denke es ist auf jeden Fall besser die C++ Casts also static_cast usw. zu verwenden.

mfg Philipp

Werbeanzeige