CRecordset
的拷貝構造函數被明確標記爲deleted
防止複製CRecordset
對象從一個到另一個。
因此,該功能將通過指針返回一個新的對象,需要調用者delete
對象時,使用完畢後:
CRecordset* CAccessDatabaseReader::ExecuteSqlQuery(LPCTSTR pszSqlQuery)
{
CRecordset *recordSet = new CRecordset(&m_Database);
if (!recordSet->Open(CRecordset::forwardOnly, pszSqlQuery))
{
delete recordSet;
return NULL; // or raise an exception
}
return recordSet;
}
CRecordset *rs = reader.ExecuteSqlQuery(TEXT("..."));
if (rs)
{
...
delete rs;
}
或者更好:
std::unique_ptr<CRecordset> CAccessDatabaseReader::ExecuteSqlQuery(LPCTSTR pszSqlQuery)
{
std::unique_ptr<CRecordset> recordSet(new CRecordset(&m_Database));
if (!recordSet->Open(CRecordset::forwardOnly, pszSqlQuery))
recordSet.reset(); // or raise an exception
return recordSet;
}
std::unique_ptr<CRecordset> rs = reader.ExecuteSqlQuery(TEXT("..."));
if (rs)
{
...
}
的CRecordset似乎是一個不可複製的類。它沒有複製構造函數。 –
在C++中,您可以關閉類的複製,這就是CRecordset所做的。這就是爲什麼你不能按價值回報它。 – PaulMcKenzie
要「返回」這樣的基於CObject的類,您可能必須使用動態分配。 –