CComPtr的不能理解.解决方法

CComPtr的不能理解.
CComPtr的构造函数是这样的:
CComPtr( ) throw ( ); 

CComPtr(
  T* lp 
) throw ( );

CComPtr (
  const CComPtr< T >& lp 
) throw ( );

但可以这样声明:
CComPtr<IConnectionPoint> spConnectionPoint;

请问这样声明符合上面的第几种情况, 是第二种情况吗? 应该不会吧, 它的参数是个指针呀, 而IConnectionPoint是接口类不是指针.
如果是的话,第二种情况为什么不把*去掉而这样声明呢?

CComPtr(
  T lp 
) throw ( );



------解决方案--------------------
调用这个无参数的构造CComPtr( ) throw ( );

IConnectionPoint *p = NULL;
CComPtr<IConnectionPoint> spConnectionPoint(p);
这样的话就是调用这个构造
CComPtr(T* lp) throw() :
CComPtrBase<T>(lp)

{
}
------解决方案--------------------
你没有调用带参数的构造函数,所以是这种情况:
CComPtr( ) throw ( );

CComPtr<IConnectionPoint>这个当成一个类型来看,跟int一样,你的代码就如同:
int i;

如果你需要传递一些参数给构造函数,就要如下:
int i(10);