MSVC 建立 QT 專案預設警告等級為 /W1 (最低),極易漏報嚴重邏輯錯誤。務必手動調至 /W3 (Level 3) 或 /W4。
// A.h
class A {
public:
A() { m_buf = new char[1024]; }
virtual ~A() { delete[] m_buf; } // 虛擬解構
private:
char* m_buf;
};
// C.h (前向宣告 A)
class A;
class C {
public:
C() : m_a(0) {}
virtual ~C() { if (m_a) delete m_a; } // 非虛擬解構呼叫 delete 基類指標
private:
A* m_a;
};
// D.h
#include "C.h"
#include "A.h"
class D : public C {
public:
D() { m_a = new A; }
~D() { printf("oh D destroyed"); } // 未顯式 delete m_a
};
// main.cpp
#include "D.h"
int main() {
C* d = new D;
delete d; // 僅呼叫 ~C(),~A() 從未執行!
}
~A() 不被呼叫,記憶體洩漏 1GB。/W4):警告 C4265:class 'C' has virtual functions but destructor is not virtual。直接揭露設計缺陷。QMAKE_CXXFLAGS_WARN_ON = -Wall -Wextra (MinGW) 或 QMAKE_CFLAGS_WARN_ON = /W3 (MSVC)。低警告等級製造「假象的成功」,高警告等級是「免費的靜態分析工具」。養成 /W3 以上習慣,能攔截 90% 潛在記憶體與多態錯誤。