我对C++不熟悉,搞一个数据库项目,我知道当用完一个连接时,要退出连接;但提示内存操作错误;Database::~Database()
{ db.Close();
Database::Close();
}请问在析构函数里怎样关闭连接呢?

解决方案 »

  1.   

    不要在析构函数里关闭数据库,
    另外写一个Close(), Disconnect()函数,这样和Connect(),Open()函数配套使用,这才是写数据库程序的良好习惯,逻辑也不会太乱。
      

  2.   

    还有一个原因是,数据库连接经常是全局的,要是在析构函数里关闭连接就晚了,当然在析构函数也可以做一个检测,如果没有关闭数据库则强制关闭。你的析构可能应该这样写:
    Database::~Database()
    {
        if(m_ptrConn)
        {
            Close();
            m_ptrConn=NULL;
        }
    }m_ptrConn=是你的数据库对象的指针或者一个BOOL开关。
      

  3.   

    还有一点问题:)请问 shines(Othelloing):
        你所说的“全局”是不是指,只要我不关闭它,那么它就一直在内存中可以被其他类调用呢?
      

  4.   

    我不知道你用的是DAO,还是ADO,如果是ADO,一般是只Close(),不Disconnect(),其实只是保留了Connect()时的数据库连接对象的指针,如果真正要推出程序的时候才Disconnect(),释放连接。初始化Ole的时候最好使用:
    CoInitialize(NULL);
    和 CoUninitialize();建议不选择使用AfxOleInit();初始化Ole