COM



  • im CodersMagazine hab ich gelesen, dass man referenzzählende COM objekte nicht releasen sollte, weil die wahrscheinlichkeit recht hoch ist, dass man es einmal vergisst. wenn man es aber nie macht, kommt der zähler garantiert mal wieder bei null an??!!



  • Nein. Der Zähler wird mit jedem AddRef/Release-Aufruf geändert. Unterbleibt das passende Release, dann wird das Objekt nie freigegeben. Das ist eine Grundregel von COM.



  • Man kann aber AddRef so oft aufrufen bis der Zähler wieder auf 0 ist



  • gri schrieb:

    Man kann aber AddRef so oft aufrufen bis der Zähler wieder auf 0 ist

    Ja, das müsste man dann aber wohl bis zu 2147483647 mal machen. 😉



  • 2147483647

    The internal reference counter that IUnknown::AddRef maintains should be a 32-bit unsigned integer.



  • Tja, dann braucht man wohl noch ein paar mehr Versuche. 😉


  • Mod

    gri schrieb:

    Man kann aber AddRef so oft aufrufen bis der Zähler wieder auf 0 ist

    Und dann?
    👎 Dann existiert an irgendeiner Stelle noch eine weitere Referenz auf dieses Objekt. Der Zeiger ist dann aber wirklich ungültig, weil das Objekt weg ist.
    Folge: Crash!

    Das ist absolut ungeeignet für einen Release, wenn man Probleme mit der Referenzzählung hat.



  • Ich weiß garnicht wie man ein Release bitte vergessen kann. Schreibt ihr immer so einen Mist-code, dass ihr das vergesst? Dass ist ja nun mal wirklich nicht schwer.



  • nimm CComPtr aus der ATL


Log in to reply