C++進階--派生類的析構(虛解構函式,shared_ptr)
阿新 • • 發佈:2018-12-23
//############################################################################ /* 在多型虛基類中宣告一個虛解構函式 */ /* 為什麼需要虛解構函式 */ class yellowdog : public dog { }; dog* dogFactory::createDog() { dog* pd = new yellowdog(); return pd; } int main() { dog* pd = dogFactory::createDog(); ... delete pd; // 只有基類dog的解構函式被呼叫,資源部分釋放 } /* 解決方法1 : */ class dog { virtual ~dog() {...} } /* -- 什麼時候需要使用虛解構函式: 任何有虛擬函式的類都必須有虛解構函式 -- 什麼時候不適用虛解構函式: 1. 類的大小需要很小的時候 2. 類的大小需要精確的時候,例如將一個物件從C++傳到C */ /* 方法2: 使用shared_ptr,注意使用unique_ptr並沒有此效果 */ class dog { ~dog() {...} } class yellowdog : public dog { ~yellowdog() {...} }; class dogFactory { public: // 生成yellowdog static shared_ptr<dog> createYellowDog() { return shared_ptr<yellowdog>(new yellowdog()); // ... 生成其他dog } int main() { shared_ptr<dog> pd = dogFactory::createYellowDog(); /* 注意:所有的STL類都沒有虛解構函式,所以在繼承的時候要小心。儘可能使用智慧指標 */