只有你亲眼见到new的时候才能确定你得到了一个新的对象。
CreateObject是一个封装函数,在某些时候返回的是一个已有对象。

解决方案 »

  1.   

    MSDN上说:
    CoCreateInstance() : Creates a single uninitialized object of the class associated with a specified CLSID. 
    因为是没有初始化的,所以一定会是一个新的对象,否则,又怎么会没有初始化呢?不解,请继续赐教。
      

  2.   

    多个线程同时访问一个已产生的组件。比如你把一个接口作为参数传给另一个线程,那么就有两个线程访问该组件,这时设成free模式就会使这两个线程可以同时访问组件,而不会被串行化。
      

  3.   

    还有一种被称为singleton的COM对象,它们的类工厂只产生一个实例,换句话说,你调若干次CoCreateInstance或IClassFactory::CreateInstance,都只有一个实例存在。还有的COM对象的类工厂在数据段或堆栈上产生实例,这时都会存在多个线程访问同一个实例的情况。
      

  4.   

    谢谢 horris(僧推月下门),tridust(小小鸟)的回复。
    horris提到的多线程访问的情况我可以理解。但singleton对象我却从来没有听说过,能讲的详细一点吗?能否使用atl产生一个这种对象?
    com+的线程模型又是怎样的呢?好像支持事物的组件的线程模型不太一样,能否解释一下?