स्कॉट मेयर्स Effective C++ में कहते हैं:
यदि किसी क्लास में कोई वर्चुअल फ़ंक्शन है, तो इसमें एक वर्चुअल डिस्ट्रक्टर होना चाहिए, और जिन क्लासेस को बेस क्लास के रूप में डिज़ाइन नहीं किया गया है या पॉलीमॉर्फिक रूप से उपयोग करने के लिए डिज़ाइन नहीं किया गया है, उन्हें वर्चुअल डिस्ट्रक्टर्स घोषित नहीं करने चाहिए।
इसलिए आपको पॉलीमॉर्फिक बेस क्लासेस में डिस्ट्रक्टर्स को वर्चुअल घोषित करना चाहिए। ऐसा इसलिए है क्योंकि यदि आप डेराइव्ड कंस्ट्रक्टर का उपयोग करके बेस क्लास का ऑब्जेक्ट बनाते हैं:
Base *b = new Derived(); // b का उपयोग करें delete b;
यदि Base का डिस्ट्रक्टर वर्चुअल नहीं है तो इस मामले में delete b का व्यवहार अनडिफाइंड है। डिस्ट्रक्टर की कॉल किसी नॉन-वर्चुअल कोड की तरह हल होगी। इसलिए बेस क्लास का डिस्ट्रक्टर कॉल होगा लेकिन डेराइव्ड क्लास का नहीं, इससे रिसोर्स लीक होगा।