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