m_pRecordset->Open("SELECT * FROM users",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);

m_pRecordset->Open("Driver={SQLServer};Server=SERVER;Uid=1;Pwd=1;Database=Data",adOpenStatic,adLockOptimistic,adCmdText);相比。
    还有把_variant_t((IDispatch*)m_pConnection,true)写成m_pRecordset.GetInterfacePtr()的,他们有什么不同呢?如果前者速度快,我就想使用前者,可是我对MSDN中下面的话不太理解,请高手帮我详细的解释一下:
_variant_t( IDispatch* pDispSrc, bool fAddRef = true )
Constructs a _variant_t object of type VT_DISPATCH from a COM interface pointer. If fAddRef is true, then AddRef is called on the supplied interface pointer to match the call to Release that will occur when the _variant_t object is destroyed. It is up to you to call Release on the supplied interface pointer. If fAddRef is false, this constructor takes ownership of the supplied interface pointer; do not call Release on the supplied interface pointer.
上面说到的释放问题,我附带问一下,智能指针是不是不需要Release,加上它只是一个好习惯而已?