Я пытаюсь использовать VC ++ и ADO для подключения к SQL Server. И используйте C ++ Memory Validator, чтобы проверить, есть ли утечки памяти. Ниже приведены мои коды:
ADODB::_ConnectionPtr Conn1;
CoInitialize(NULL);
// Trap any error/exception.
try
{
// Create and Open Connection Object.
Conn1.CreateInstance( __uuidof( ADODB::Connection) );
Conn1->ConnectionString = _bstr_t(L"Provider=sqloledb;Data Source=MYPC;Integrated Security=SSPI;");
Conn1->Open( _bstr_t(L""), _bstr_t(L""), _bstr_t(L""), -1 );
Conn1->Execute(_bstr_t(_T("DROP TABLE UnexistingTable;")), NULL, ADODB::adCmdText | ADODB::adExecuteNoRecords);
Conn1->Close();
}
catch(_com_error& e)
{
CString strError = e.ErrorMessage();
}
CoUninitialize();
Валидатор памяти C ++ сообщит о следующей утечке памяти, вызванной _com_error :: ErrorMessage ():
Но я проверяю документ на ErrorMessage, и он говорит:
Возвращаемая строка выделяется API-интерфейсом FormatMessage и освобождается при уничтожении объекта _com_error.
Так что, похоже, с моими кодами все в порядке. Я пытаюсь поставить точку останова в деструкторе _com_error :: ~ _com_error, но VS сказал, что не может поставить точку останова из-за оптимизации кода. Поэтому я не могу знать, было ли сообщение успешно выпущено или нет.