Thanks ackabacka and siddhartha for reply.

Actually, why I asked first doubt is because of some member variable COM pointer and there's a function like CleanPointers() that releases all pointers. It is called by other functions and also inside the destructor. My doubt was that if I already release the COM pointer, then do I need to put some check in d'tor not to call release again. But as I gathered from your post, it is not required.

What about my second doubt - regarding passing pointers as function arguments?
Do I need to release?