ATL CCommand关闭破坏

时间:2012-01-19 15:53:37

标签: c++ sql atl

我正在使用ATL通过OLEDB与SQL数据库进行通信。

我的问题是,如果我之前已调用CCommand::CloseOpen析构函数是否清理,是否必须明确调用CCommand

我有一种感觉,我必须打电话给Close,但如果我不必这样做会很好!

感谢。

2 个答案:

答案 0 :(得分:1)

请参阅我对丹尼尔回答的评论。析构函数清理它,你不必担心。 MSDN代码段将在CoUninitialize之后调用析构函数,这是他们在关闭COM之前为了释放接口而执行显式ReleaseCommand的唯一原因。

他们可以这样做:

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的析构函数可以完成所有操作。

答案 1 :(得分:0)

您需要按照MSDN中的说明同时拨打CloseReleaseCommand