试了试,CreateCall时建立的异步对象,其析构函数根本不会执行这资源肯定会泄露啊,除非进程结束

解决方案 »

  1.   

    CreateCall时建立的异步对象,其析构函数根本不会执行
    --------------------------------------------
    不是很明白,创建异步对象时候,为什么想要执行析构函数?哪个类的析构函数?
      

  2.   

    假设CreateCall时建立了异步对象pAsyncCall给用户然后客户调用完了异步函数,调用pAsyncCAll->Release,很显然这个release的是系统的,因为aggregate对象pAsyncCall自己的析构函数什么时候执行?就算是进程自然结束,试了试,也没机会执行,当然进程结束了,也就无所谓泄露不泄露了感觉Asynchronous Call太不透明了,也没什么用,client直接多线程不就得了而且com+好像不支持Asynchronous Call
      

  3.   

    调了半天,总算找到问题了,我想呢,怎么可能资源泄露用到的成员变量ISynchronize不能按照常规的做法,在析构函数中Release,必须先Release智能指针好像也可以,atl不熟,不知道具体什么时候Release的因为,http://msdn.microsoft.com/en-us/magazine/cc301334.aspx,《COM+ Programming: A Practical Guide Using Visual C++ and ATL》,里面的图再清楚不过了asynchronous call复杂是复杂,还分client和server,不过自己能控制的不多,都是系统在做
      

  4.   

    无语,ISynchronize又搞了半天,实现了还是要用系统的
    Your ISynchronize interface is used only if your call object is not aggregated by the stub. This only happens if your call object resides in the same apartment as the thread that calls ICallFactory::CreateCall.