Handle wrappen?



  • Folgendes Problem: Ich habe eine Klasse, welche intern ein Handle speichert und es beim Aufruf des Destruktors mit CloseHandle() freigibt. Wie kann ich jetzt den Kopierkonstruktor implementieren? Dazu müsste ich entweder das Handle klonen (dazu finde ich absolut gar nichts in der WinAPI) oder eine sehr gute Idee haben. Ansonsten besteht die Gefahr, dass das Handle vorzeitig freigegeben wird. Wie löst man so etwas "professionell"?



  • Loesung mit reinem C++: Es ist eine "shared resource", also nutze einen "shared pointer" wie shared_ptr bzw. wrappe das Handle in eine Klasse, die reference counting unterstuetzt.

    dazu finde ich absolut gar nichts in der WinAPI

    Ich schon. Die WinAPI-Loesung: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724251(v=vs.85).aspx

    Und ja, du bist im falschen Forum.



  • knivil schrieb:

    Es ist eine "shared resource", also nutze einen "shared pointer" wie shared_ptr bzw. wrappe das Handle in eine Klasse, die reference counting unterstuetzt.

    Oder, je nachdem, verbietet ein kopieren der Klasse gleich komplett.

    zB wenn es eine File-Klasse ist und es sich um ein File Handle hält, dann verbietet man idR das kopieren.

    Kommt auf die Situation an. Oft ist natürlich ein shared_ptr eine gute Wahl.



  • Und ja, du bist im falschen Forum.
    

    Och wollte eigentlich zuerst im WinAPI-Forum posten, aber ich war mir unsicher und wollte lieber eine C++-Lösung sehen, da mir dieses Problem letztendlich nicht nur unter Windows begegnen wird. Ich habe den Nutzen aber anscheinend falsch verstanden, da ich dachte es handelt sich um eine Funktion um Handle für Child-Prozesse zu erstellen und deren Rechte festzulegen (oder so ähnlich -.-).

    Danke für eure Hilfe. In meinem Fall wird es wohl das beste sein, das Kopieren zu verbieten. Es macht praktisch gesehen auch gar keinen Sinn.



  • *Ich [statt Och] (tschuldigung für Doppelpost)



  • Schau dir mal an was ein Move Konstruktor ist 😉


Anmelden zum Antworten