मुझे boost :: check_delete के उद्देश्य को समझ में नहीं आता है। प्रलेखन कहते हैं:बूस्ट का उद्देश्य :: check_delete
सी ++ स्टैंडर्ड अनुमति देता है, में 5.3.5/5, को अधूरा वर्ग प्रकार के संकेत हटाएं-अभिव्यक्ति के साथ हटा दिया। जब कक्षा में एक गैर-तुच्छ विनाशक होता है, या वर्ग-विशिष्ट ऑपरेटर हटाता है, तो व्यवहार अपरिभाषित है। कुछ कंपाइलर्स चेतावनी जारी करते हैं जब एक अपूर्ण प्रकार हटा दिया जाता है, लेकिन दुर्भाग्य से, सभी नहीं करते हैं, और प्रोग्रामर कभी-कभी को अनदेखा करते हैं या चेतावनियां अक्षम करते हैं।
आपूर्ति समारोह और वर्ग टेम्पलेट्स इन समस्याओं को रोकने के लिए, के रूप में वे एक पूरी प्रकार की आवश्यकता होती है, और नहीं तो एक संकलन त्रुटि कारण इस्तेमाल किया जा सकता।
तो सी ++ मानक आप अधूरा प्रकार, यदि प्रकार एक गैर तुच्छ नाशक है जो अपरिभाषित व्यवहार का कारण बनता है हटाने देती है। क्या? एक अपूर्ण प्रकार का कोई विनाशक कैसे हो सकता है? एक अधूरा प्रकार सिर्फ एक प्रोटोटाइप नहीं है?
// this file does not include the definition of foo
class foo;
void bad(foo *f)
{
delete f; // undefined behavior if there exists foo::~foo
}
हकीकत में, foo की परिभाषा कुछ ऐसा दिखाई देगा:
क्या यह स्लाइसिंग के साथ कुछ करने के लिए हो सकता है? http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c – Cogwheel