ADO编程中:
_ConnectionPtr m_ConnectionPtr;
m_Connection.CreateInstance("ADODB.Connection");
m_Connection->Open((_bstr_t)ConStr,"","",adModeUnknown);
m_Connection->Close();又是.运算符,又是->,到底这个_ConnectionPtr是什么?

解决方案 »

  1.   

    那这个算指针?为什么create要用"." ?
      

  2.   

    刚百度了下,_ConnectionPtr是Connection对应的智能指针,为什么叫智能指针?和一般的指针有什么区别?
    既然是指针,应该是调用Connection对象的CreateInstance方法,为什么不用"->",而要用"."?
      

  3.   

    _ConnectionPtr是一个类
    ->是重载符,为了_ConnectionPtr使用起来像指针
      

  4.   

    原因之一是为了方便易用
    重载->,恰好符合其名字的意义 - 智能“指针”_ConnectionPtr声明
    _COM_SMARTPTR_TYPEDEF(_Connection, __uuidof(_Connection));_COM_SMARTPTR_TYPEDEF宏
    #define _COM_SMARTPTR_TYPEDEF(Interface, IID) typedef _com_ptr_t<Interface> Interface ## Ptr;类_com_ptr_t的运算符->重载
    Interface* operator->() const 
        { 
            if (m_pInterface == NULL) {
                _com_issue_error(E_POINTER);
            }        return m_pInterface; 
        }

    m_Connection->Open((_bstr_t)ConStr,"","",adModeUnknown);相当于
    m_Connection.m_pInterface->Open((_bstr_t)ConStr,"","",adModeUnknown);
      

  5.   


    m_pInterface是private的
    m_Connection.m_pInterface->Open只是说明一下
      

  6.   


    模板类指针才对,纠正一下_com_ptr
      

  7.   

    你就当它是一个类就行了,有指针的功能,还有类的功能,和std::auto_ptr有点像
    一般这种点操作是智能指针的功能,如内存管理之类的
    是->操作就是封装的指针的功能了,这里就是是数据库具体的方法