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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

21

29.11.2015, 12:04

Auch sonst seit c++11 sollte man Smart Pointer verwenden anstatt normale Pointer(Meiner Meinung nach)

Smartpointer sind nicht einfach ein Ersatz für "normale" Pointer! Wenn auch sicherlich einer der am weitesten verbreiteten Irrglauben: Wenn du das glaubst, solltest du dir das mit den Smartpointern unbedingt nochmal anschauen, denn dann hast du da was ganz grundlegend missverstanden...

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

22

29.11.2015, 12:10


Wieso Memoryleak? Die Adressen werden in dem Vector gespeichert und spätestens durch den Destruktor von "Context" freigegeben, oder habe ich etwas verpasst


Leider nicht. Das Objekt wird nur in den Container eingefügt falls der 'Create' Aufruf erfolgreich ist. Ansonsten leaked der Code.
@D13_Dreinig

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

23

29.11.2015, 12:12

Wieso Memoryleak? Die Adressen werden in dem Vector gespeichert und spätestens durch den Destruktor von "Context" freigegeben, oder habe ich etwas verpasst?

Wenn das pBuffer->create() in Context::createVertexBuffer() aus irgendeinem Grund fehlschlägt, leakest du ein VertexBuffer Objekt. Darüber, was passiert, wenn in deinem Code da irgendwo zwischendrin eine Exception fliegt, wollen wir besser gar nicht erst anfangen, nachzudenken... ;)

Ich sehe hier nicht genau den Sinn von Smartpointer.

Wieso genau denkst du denn, dass die hier keinen Sinn haben? Eine gute Faustregel für modernes C++ ist: Wenn in deinem Code irgendwo ein nacktes delete steht, hast du was falsch gemacht.

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

24

04.12.2015, 12:59

Ah, jetzt sehe ich den Fehler :thumbsup:

Was SmartPointer betrifft: Ich nutze sie normalerweise immer um Referenzen zurückzugeben.
Wenn die Pointer nur intern verwendet werden, dann nutze ich sie nicht :o
Aber gut, der Memoryleak wäre dadurch verhindert worden.

LG Julien
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Werbeanzeige