在我的頭文件中,我有:
CPTSDatabase();
virtual ~CPTSDatabase();
void CloseDatabase();
在我的源文件中,我有:
CPTSDatabase::~CPTSDatabase()
{
CloseDatabase();
}
void CPTSDatabase::CloseDatabase()
{
if (m_dbDatabase.IsOpen())
m_dbDatabase.Close();
}
代碼分析是這樣說的:
class CPTSDatabase
請將它們全部定義或刪除 (c.21)。我已經閱讀了這個,但看不到這個問題。我有一個構造函數和析構函數,我從不使用 delete` 這個詞。我錯過了什麼?
首先,請記住,/analyze
包括 C26432 在內的一些警告是信息性的和可選的。如果您不想啟用特定的 C++ 核心指南檢查,您可以禁用它。請參閱Microsoft 文檔
它真正告訴你的是“嘿,你有沒有想過要如何為你的班級處理複製或移動?”
一般建議是,如果您定義了 dtor,那麼您應該處理複製構造函數、移動構造函數、複製賦值運算符和移動賦值運算符。例如,您的類可以支持移動操作,但不支持複製操作似乎是合乎邏輯的,因為它擁有系統資源(某種數據庫句柄),因此您應該這樣做:
CPTSDatabase();
CPTSDatabase(CPTSDatabase&&) = default;
CPTSDatabase& operator= (CPTSDatabase&&) = default;
CPTSDatabase(CPTSDatabase const&) = delete;
CPTSDatabase& operator=(CPTSDatabase const&) = delete;
virtual ~CPTSDatabase();
也就是說,如果您的類本身包含不支持移動的變量(如std::mutex
或std::atomic
),那麼您也應該刪除它們。
CPTSDatabase();
CPTSDatabase(CPTSDatabase&&) = delete;
CPTSDatabase& operator= (CPTSDatabase&&) = delete;
CPTSDatabase(CPTSDatabase const&) = delete;
CPTSDatabase& operator=(CPTSDatabase const&) = delete;
virtual ~CPTSDatabase();
請記住,刪除這些基本操作會使您的類在如何使用它方面受到更多限制,但這比以破壞它的方式使用您的類要好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句