Hängende Zeiger vermeiden



  • Danke euch für die Zusatzinfos, das mit dem Deleter bei SmartPointern kannte ich auch noch nicht, das ist ja genial.

    Hier hatte ich auch schon mal die data() Methode vom std::vector im Einsatz. Das ist auch eine Stelle wo ich vorher nur rohe Zeiger auf ein Char CArray eingesetzt hatte:

    Framebuffer::Framebuffer(int width, int height)
    	:
    	width_(width),
    	height_(height),
    	length_(width * height << 2),
    	yoffset_(width << 2),
    	buffer_(width * height << 2),
    	color_(Color(0, 0, 0))
    {
    	img_ = QImage(buffer_.data(), width_, height_, Framebuffer::format_);
    }
    
    

    Toll was man alles bei so eine etwas größeren Testprojekt dazulernt. Ich hatte ja schon diverse Male mit C++ und auch C angefangen(früher mal Assembler auf dem Amiga), aber dort nur stupide alle Möglichen Sachen in der Konsole ausprobiert und dann genauso schnell wieder alles vergessen was ich gelernt habe. Hier bei dem Projekt ärgert es mich richtig wenn ich nicht weiter komme und grobe Schnitzer drin sind, dann will ich es besser machen.



  • @chris4cpp sagte in Hängende Zeiger vermeiden:

    Wenn ich noch wirklich einen Zeiger brauchte kam meist shared_ptr (...) zum Einsatz.

    Spannend. Im Regelfall benutzt man für besitzende Zeiger std::unique_ptr. Shared_ptr braucht man (=ich, Schluss von mir auf andere...) eher sehr selten, nämlich wenn die Ressourcen wirklich keinen eindeutigen Besitzer haben. Also: bist du sicher, dass du wirklich überall, wo du shared_ptr benutzt, wirkich shared_ptr statt unique_ptr (bzw. rohe, nicht besitzende Zeiger) brauchst?



  • @wob Man kann mit shared_ptr viel einfacher die Scheuklappen aufsetzen und Komponenten nur für sich genommen betrachten und entwickeln. "Geborgte" Pointer sind ... oft keine so gute Idee wie sie anfangs zu sein scheinen.

    Und mit "geborgte" Pointer meine ich: rohe, nicht besitzende Zeiger die länger leben als der Funktionsaufruf bei dem sie übergeben werden. Also die Sorte wo ich einem Objekt einen Zeiger gebe, das merkt sich den Zeiger dann, und ich bin dann verantwortlich dafür das Objekt lange genug am Leben zu halten.



  • @wob Nein, ich bin mir nicht sicher ob nicht auch ein unique ausgereicht hätte. Der Shared Pointer klang von der Beschreibung her sehr einfach, weil ich hier wirklich die Verantwortung sehr simple abgeben kann.


Anmelden zum Antworten