2010-04-27 12 views
6

मैं एक ऐसे मज़ेदार की तलाश में हूं जो इसके तर्क को हटा देता है:क्या कोई मानक डिलीट फिक्सर है?

template<class T> 
struct delete_functor 
{ 
    void operator()(T* p) 
    { 
     delete p; 
    } 
}; 

क्या std, tr1 या boost में ऐसा कुछ है?

+1

यदि आप इसे स्वयं लिख रहे थे, तो btw, फिर 'struct delete_functor {टेम्पलेट शून्य ऑपरेटर() (टी * पी) {हटाएं पी; }}; ', जब आप एक बनाते हैं तो आपको टी निर्दिष्ट करने की आवश्यकता नहीं होती है। –

+0

@ स्टेव कूल। जानकार अच्छा लगा! – fredoverflow

उत्तर

10

सी ++ 0x का समर्थन करने के लिए मानक पुस्तकालय में std::default_delete जोड़ देगा।

यह प्रभावी रूप से आपके delete_functor के समान कार्यक्षमता है, लेकिन सरणी प्रकार वस्तुओं के लिए delete[] पर कॉल करने के लिए भी विशिष्ट है।

+1

धन्यवाद, एक आकर्षण की तरह काम करता है! – fredoverflow

+0

'std :: default_delete ()' क्या करता है? – user1095108

+0

@ user1095108: यदि 'ऑपरेटर()' तत्काल है, तो कार्यक्रम खराब हो जाएगा। क्लास टेम्पलेट तत्काल होने पर जिस प्रकार से 'default_delete' को तत्कालित किया जाता है, अधूरा हो सकता है, लेकिन यह' ऑपरेटर() 'तत्काल होने पर पूरा होना चाहिए। –

2
+0

मैं इसे काम पर नहीं ला सकता हूं। मुझे क्या हेडर शामिल करना है? – fredoverflow

+0

'# शामिल <बूस्ट/लैम्ब्डा/construction.hpp>' –

0

है हम अपनी कंपनी में बढ़ावा उपयोग करने के लिए अनुमति नहीं है, और हम या तो सी ++ 11 उपयोग नहीं कर रहे हैं, इसलिए मैं इस का उपयोग करें:

मुझे लगता है कि यही वह है जिसे आप ढूंढ रहे हैं।

आप इसे dtor_fun_t के रूप में भी पुनर्निर्मित कर सकते हैं और "हटाएं _ पृष्ठ" को प्रतिस्थापित कर सकते हैं; " _ptr-> ~ _Type();" केवल dtor कॉल करने के लिए। यह वह मामला होगा जहां आपने उदाहरण के लिए मेमोरी मैनेजर और प्लेसमेंट नया इस्तेमाल किया था।

संबंधित मुद्दे