在以下示例中,b
是一個多態指針類型,其靜態類型是Base*
並且其動態類型是Derived*
。刪除一個沒有虛擬析構函數的多態對象會發生什麼?
struct Base
{
virtual void f();
};
struct Derived : Base
{
};
int main()
{
Base *b = new Derived();
// ...
delete b;
}
b
在沒有虛擬析構函數的情況下被刪除會發生什麼?
閱讀此內容以及https://www.securecoding.cert.org/confluence/display/cplusplus/OOP52-CPP.+Do+not+delete+a+polymorphic+object+without+a+virtual+destructor – v78
[多態性中的基類缺少虛擬析構函數=資源泄漏?](http://stackoverflow.com/questions/33455750/virtual-destructor-missing-for-base-class-in-polymorphism-ressource-leak) – stefaanv