Смотрите мой комментарий к ответу Даниила. Деструктор убирает это, и вам не о чем беспокоиться. Во фрагменте кода MSDN деструктор должен вызываться после CoUninitialize
, и это единственная причина, по которой они явно указывают ReleaseCommand
для освобождения интерфейсов до выключения COM.
Вместо этого они могли бы сделать это так:
CoInitialize(...);
{
CCustomer rs;
// ...
// rs.ReleaseCommand() <<-- Not needed
// rs.Close() <<-- Not needed
}
// NOTE: ~CCustomer already worked, it is safe to shut COM down
CoUninitialize();
Почему? ATL atldbcli.h
:
~CAccessorRowset()
{
Close();
}
// ...
~CCommandBase()
{
ReleaseCommand();
}
// ...
class CCommand :
public CAccessorRowset<TAccessor, TRowset>,
public CCommandBase,
public TMultiple
Итак, деструктор CCommand
делает все это.