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

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

11

26.11.2009, 23:53

Zitat von »"Nexus"«

Zitat von »"TrommlBomml"«

ich hab eine klasse CReferenceWatcher, der alle reference-count objects überwacht und bei keiner referenzierung freigibt.
Wieso eigentlich das Rad neu erfinden, anstatt sich auf getestete und optimierte Mittel zu verlassen? boost::shared_ptr (gibts auch im TR1) hat die gleiche Funktion.


jo nur aus übungszwecken wollte ich selber alles implementieren, wie das ganze projekt, verwendet ausser directX, fmod, ticpp und stl keine weiteren abhängigkeiten. irgendiwe sträube ich mich auch noch ein bisschen gegen boost, weil es ganz klar coole klassen gibt, aber das einrichten ist und deployen ist doch wohl ein graus oder?! hab ich damit auch nicht so intensiv beschäftigt gebe ich auch zu.

Zitat von »"Nexus"«

Zitat von »"TrommlBomml"«

abgeleitet ist das von CGenericHandleManager<NUMERICHANDLE,CLASS*>.
Brauchst du diese Vererbung tatsächlich (d.h. ist dein CReferenceWatcher wirklich ein CGenericHandleManager)? Sorry, falls ich daneben liege, aber Vererbung wird eben oft eingesetzt, wo Aggregation angebrachter wäre. Hier habe ich so einen Verdacht, aber kann gut sein, dass ich mich irre... ;)


naja ich versuche mich immer an die alte faustregel zu halten: einen satz bilden mit "ist ein" oder "hat einen" finde da eigl "ist ein" besser, daher diese entscheidung und finde es durchaus praktisch, dass ich sonst nichts weiter machen muss und das ererbte alles für das freigeben macht (naja ausser für den fall wo es mir grad die beine wegreisst ;)).

12

27.11.2009, 13:19

Zitat von »"TrommlBomml"«

irgendiwe sträube ich mich auch noch ein bisschen gegen boost, weil es ganz klar coole klassen gibt, aber das einrichten ist und deployen ist doch wohl ein graus oder?! hab ich damit auch nicht so intensiv beschäftigt gebe ich auch zu.
Schau dir mal das an. Mit dem Boost-Installer ist das Einrichten kein Problem. Aber wie gesagt ist shared_ptr auch im Technical Report 1. Trotzdem würde ich mir mit der Zeit Boost überlegen.

Zitat von »"TrommlBomml"«

und finde es durchaus praktisch, dass ich sonst nichts weiter machen muss und das ererbte alles für das freigeben macht
Faulheit ist eben oft ein Grund für Vererbung. ;)

Wenn deine Klassenbeziehung genauso gut als Aggregation realisierbar ist, dann nimm diese. Damit lässt du dir viel mehr Freiheiten im Design offen, was dir später wahrscheinlich zu Gute kommt.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

13

27.11.2009, 19:23

Also einrichten von boost ist recht einfach, zumindest mit dem Installer. (habe keine Lust mich immer ums compilen zu kümmern).

Nur für Smart Pointer lohnt es sich wahrscheinlich vom Overhead nicht ganz, aber die wahrscheinlichkeit, dass du noch mehr brauchst ist relativ hoch, daher lohnt es sich wahrscheinlich schon das mal auszuprobieren.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

27.11.2009, 21:03

Für die Smart Pointer sollten eigentlich die bloßen boost Header reichen!?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

15

27.11.2009, 21:22

Zitat von »"dot"«

Für die Smart Pointer sollten eigentlich die bloßen boost Header reichen!?


Ich meinte halt auch das runterladen der Lib usw.

Eigentlich reichen die Header, aber die haben teilweise eine enorme interne Abhängigkeit, so dass du dann sowieso fast alles mit nehmen musst. ;)

16

27.11.2009, 22:00

Zitat von »"Nexus"«

Wenn deine Klassenbeziehung genauso gut als Aggregation realisierbar ist, dann nimm diese. Damit lässt du dir viel mehr Freiheiten im Design offen, was dir später wahrscheinlich zu Gute kommt.

Ich baue mein RPG jetzt schon zum zweiten mal um, um Vererbungen durch Aggregationen zu ersetzen. Einfach weil man damit viel flexibler ist.
Lieber dumm fragen, als dumm bleiben!

TrommlBomml

Community-Fossil

  • »TrommlBomml« ist der Autor dieses Themas

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

17

28.11.2009, 10:27

okay klingt doch sehr positiv, vor allem wären ein paar freiheiten durchaus ganz nett, wie mir in dem zuge gleich auffällt. bau ich dann mal stück für stück an den passenden stellen um.

18

28.11.2009, 13:17

Man sollte auch generell überlegen, ob man wirklich Singletons oder globale Variablen benötigt. Man kann schon Probleme kriegen, weil man nicht so einfach Steuern kann, wann die Variablen erstellt und wann sie wieder gelöscht werden. (simples Beispiel: man hat ein Singleton Logmanager, und einen Singleton Speichermanager, der Logmanager hat Speicherbereiche die vom Speichermanager verwaltet werden, also muss dieser auf jeden Fall zuerst destruiert werden, was man aber meines Wissens nach bei statischen oder globalen Variablen nicht steuern kann.)
Außerdem ist es schwer, Exception von Destruktoren in globalen oder statischen Objekten zu fangen, weil die ja nach beenden der main Funktion erst gelöscht werden.
Lieber dumm fragen, als dumm bleiben!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

19

28.11.2009, 13:22

Zitat von »"Jonathan_Klein"«

Man sollte auch generell überlegen, ob man wirklich Singletons oder globale Variablen benötigt. Man kann schon Probleme kriegen, weil man nicht so einfach Steuern kann, wann die Variablen erstellt und wann sie wieder gelöscht werden. (simples Beispiel: man hat ein Singleton Logmanager, und einen Singleton Speichermanager, der Logmanager hat Speicherbereiche die vom Speichermanager verwaltet werden, also muss dieser auf jeden Fall zuerst destruiert werden, was man aber meines Wissens nach bei statischen oder globalen Variablen nicht steuern kann.)


Für solche Fälle gibts doch Phoenix-Singletons.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

20

28.11.2009, 13:40

Ein anderer Ansatz wäre sogar einfach den Log Manager gar nie frei zu geben, sondern da effektiv ein kleines (vernachlässigbares) Leak zu provozieren, welcher vom System aufgeräumt wird und das bestimmt nachdem alles andere zerstört wurde.

Werbeanzeige