blöde frage!



  • Hi,

    ich hab ein blödes designproblem aber erstmal code:

    class Texture 
    {
    public:
        Texture (void) {};
        ~Texture(void) {};
    };
    class VideoDevice 
    {
    public:
        virtual void CreateTexture (Texture ** out)
        { *out = new Texture (); }
    };
    
    VideoDevice *device = new VideoDevice;
    
    // Block öffnen
    {
        Texture *texture = NULL;
    
        device->CreateTexture (&texture);
    }
    
    texture wurde nicht automatisch freigegeben!
    

    was kann ich gutes machen damit texture frei gegeben wird ohne das ich schreiben muss "delete texture;" sondern automatisch frei gegeben wird.



  • Suach mal nach RAII. Smartpointer wäre ein weiteres Stichwort.

    Anders Thema:

    virtual void CreateTexture (Texture ** out)
        { *out = new Texture (); }
    

    Sowas ehe ich in letzter Zeit ziemlich oft. Sind zeiger auf Zeiger besonders cool? Oder gibt es irgendetwas anderes, das gegen:

    virtual Texture * CreateTexture () const
        { return new Texture (); }
    

    spricht?
    Das sieht für mich irgendwie deutlich logischer aus. Außerdem kann ich so den Zeiger auch dort definieren, wo ich ihm die Gerade erstellte Textur zuweise:

    Texture * texture = factoryInstance.CreateTexture ();
    

    Was übersehe ich?



  • Nunja, ich wollte später noch einen long als rückgabewert einbauen (das void ist nur momentan und zur vereinfachung da!)

    nebenbei: factory ist nicht.


Anmelden zum Antworten