Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. COM
  4. when to call AddRef() and Release

when to call AddRef() and Release

Scheduled Pinned Locked Moved COM
comannouncement
2 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    pathi
    wrote on last edited by
    #1

    hi I am getting confused as when to call the methods AddRef() and Release() methods.I am using aggregation hence please tell me in detail.I am new to com Thanks Pathi bhikshapathi_g@semanticspace.com

    J 1 Reply Last reply
    0
    • P pathi

      hi I am getting confused as when to call the methods AddRef() and Release() methods.I am using aggregation hence please tell me in detail.I am new to com Thanks Pathi bhikshapathi_g@semanticspace.com

      J Offline
      J Offline
      Jesse Rosalia
      wrote on last edited by
      #2

      Im not familiar with COM aggregation, but I think I can still shed some light on this subject... The purpose of AddRef() and Release(), and the whole reference counter thing, is to insure that a resource isn't unloaded/deallocated/deleted/otherwise removed from existance before everyone is done using it. For instance, when you create a COM object, the counter gets set to 1. When you are done with this object, you call Release(), which brings the counter to 0. There is code (or should be code, if you are implementing these functions yourself) inside Release() that resembles... if (--m_nRef == 0) delete this; return m_nRef; which says "When my reference counter goes to 0, I delete myself, because I am no longer needed." For these reasons, it is recommended you AddRef() every time you store another copy of a interface pointer, and Release when you are done with that pointer, however you do not need to be that crazy about it if you have absolute apriory knowledge that your pointer will not be pulled out from under you. Keep in mind that CoCreateInstance(Ex) sets the reference counter to 1, and QueryInterface makes an implicit AddRef() call, as does many other functions used in creating/connecting to a COM object. Hope this helps. -Jesse

      1 Reply Last reply
      0
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      • Login

      • Don't have an account? Register

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • World
      • Users
      • Groups