我正在使用ATL通过OLEDB与SQL数据库通信。
我的问题是,如果我之前调用过CCommand::Close,是否必须显式调用Open,或者CCommand析构函数是否会清除。
我有一种感觉,我必须调用Close,但如果我不必这样做就好了!
谢谢。
发布于 2012-01-20 17:34:15
请看我对Daniel回答的评论。析构函数会清理掉它,你不用担心。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的析构函数做了所有的事情。
发布于 2012-01-20 00:07:20
您需要同时调用Close和ReleaseCommand,如MSDN中所述。
https://stackoverflow.com/questions/8929088
复制相似问题