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

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

11

12.05.2014, 18:21

Das beste Beispiel was mir dazu einfällt wären die Klassen Sprite und Texture von SFML, zumindest ab Version 2.0. Dort muss man auch darauf achten, dass die Texture eine mindestens ebenso lange Lebensdauer hat, wie das Sprite.
Bis Version 1.6 wurde das meines Wissens auch durch eine shared_ptr ähnliche Struktur gelöst. Allerdings bedeutet dieses Vorgehen ja, dass wirklich jede übergebene Textur auf den Heap landet, auch wenn dies gar nicht nötig wäre.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

12

12.05.2014, 18:29

Wenn es nicht nötig wäre, bräuchtest du keinen shared_ptr, denn dann wäre die Lebensdauer ja immer korrekt garantiert. ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

13

12.05.2014, 18:33

Wenn es nicht nötig wäre, bräuchtest du keinen shared_ptr, denn dann wäre die Lebensdauer ja immer korrekt garantiert. ;)

Ich meinte in dem Sinne unnötig, dass bei lvalue Referenz eh schon etwas existiert, was aller Voraussicht extern auch weiterhin existiert. Daher wäre es in diesem Fall eine Kopie auf dem Heap unnötig. Nicht so im Falle einer rvalue Referenz. Verstehst du?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

12.05.2014, 18:46

Versteh ich durchaus.
In Deinem Beispiel mit Sprite und Textur wüsste ich aber kein Szenario, wo das Sprite länger existieren sollte als die Textur. Irgendjemand besitzt schließlich das Sprite. Und dieser jemand besitzt entweder auch die Textur oder hat eine Referenz von jemandem, der noch länger lebt.
Also... an welches Szenario genau denkst Du, wo ein Sprite länger leben könnte als eine Textur?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

15

12.05.2014, 18:58

Das denke ich nicht, aber das mit am Leben erhalten der Texture kann durchaus nervig sein, weswegen es in diesen Fällen einfacher wäre, wenn das Sprite die Texture dann besitzt. Aber wir drehen uns glaube ich im Kreis.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

12.05.2014, 19:11

Na nenn mir doch einfach mal ein Beispiel, wo das Sprite länger leben würde als die Textur. Nur so können wir an dem Problem arbeiten und es analysieren. Mir fällt da kein passendes Beispiel ein, denn das Sprite soll ja etwas darstellen und die Textur ist ein Teil dieser Darstellung.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

17

12.05.2014, 19:13

Das beste Beispiel was mir dazu einfällt wären die Klassen Sprite und Texture von SFML, zumindest ab Version 2.0. Dort muss man auch darauf achten, dass die Texture eine mindestens ebenso lange Lebensdauer hat, wie das Sprite.
Bis Version 1.6 wurde das meines Wissens auch durch eine shared_ptr ähnliche Struktur gelöst. Allerdings bedeutet dieses Vorgehen ja, dass wirklich jede übergebene Textur auf den Heap landet, auch wenn dies gar nicht nötig wäre.

Sich genau diese Dinge zu überlegen, ist nunmal, was Softwaredesign eben so ausmacht... ;)

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

18

12.05.2014, 19:18

Na nenn mir doch einfach mal ein Beispiel, wo das Sprite länger leben würde als die Textur. Nur so können wir an dem Problem arbeiten und es analysieren. Mir fällt da kein passendes Beispiel ein, denn das Sprite soll ja etwas darstellen und die Textur ist ein Teil dieser Darstellung.

Ich kann dir sagen wo beides gleich lang lebt, und zwar sobald ich der Sprite eine rvalue Referenz übergeben möchte. Mir geht es im Prinzip nur darum: Wenn ich ein Sprite habe, welches eine Textur hat die genauso lange existieren soll/braucht wie das Sprite, dann wäre es ratsam, wenn das Sprite die Lebensdauer verwaltet. Dies passiert jedoch in den wenigstens Fällen, ist aber durchaus interessant und nützlich, da es in diesem Fall Arbeit abnimmt, da man nicht selbst auf die Texture zu achten braucht.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

19

12.05.2014, 19:29

Sehe ich anders. Aber das ist wie dot schon sagt eine Frage des Designs. Aus meiner Sicht braucht ein Sprite eine Textur, sollte diese aber keinesfalls besitzen (=die Lebensdauer der Textur verwalten). Ich sehe das auch gar nicht als notwendig an.
Ich sehe das eher wie "einen Pilz im Wald". Er lebt an den Wurzeln eines Baumes und braucht diesen um zu existieren. Dennoch hat er auf die Lebensdauer des Baums keinen Einfluss. Mehrere Pilze können sogar an einem Baum wachsen und auch von denen hat keiner Einfluss auf das Leben des Baums.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

20

12.05.2014, 19:36

Ok, der Vergleich überzeugt doch irgendwie... :/
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige