我正在使用ATL通過OLEDB與SQL數據庫進行通信。ATL CCommand關閉銷燬
我的問題是,如果我以前撥打Open
或CCommand
析構函數將清理,我是否必須明確地調用CCommand::Close
。
我有一種感覺,我必須打電話給Close
,但如果我不必這樣做,那將會很好!
謝謝。
我正在使用ATL通過OLEDB與SQL數據庫進行通信。ATL CCommand關閉銷燬
我的問題是,如果我以前撥打Open
或CCommand
析構函數將清理,我是否必須明確地調用CCommand::Close
。
我有一種感覺,我必須打電話給Close
,但如果我不必這樣做,那將會很好!
謝謝。
查看我對丹尼爾答案的評論。破壞者清理它,你不必擔心。 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
的析構函數做這一切。
感謝您的回答。這同樣適用於「關閉」嗎? – Nick
是的,這同樣適用於'關閉'。它也是由析構函數自動調用的。更新了上面的答案以表明這一點。 –
你能爲此提供一個資源嗎?如果是的話,我會接受你的答案! – Nick