माइक्रोसॉफ्ट रनटाइम लाइब्रेरी आवंटन कार्यों के डीबग संस्करण प्रदान करता है। सी के लिए ++ इस हस्ताक्षर के साथ नए ऑपरेटर के एक डिबग संस्करण है:प्लेसमेंट को नुकसान पहुंचाए बिना डीबग संस्करण के साथ नया ओवरराइड करना नया
void *operator new(size_t size, int blockType, const char *filename, int linenumber);
और एक मैक्रो की तरह
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
परिभाषित किया गया है अब साधन करने के लिए सभी आवंटन, एक सामान्य रूप से परिभाषित करता है
#if defined DEBUG_NEW
#define new DEBUG_NEW
#endif
हालांकि यह परिभाषा किसी भी स्थान को तोड़ती है जो प्लेसमेंट का उपयोग करती है, क्योंकि तर्कों के दो सेट सिंटैक्स त्रुटि होने लगते हैं। अब मैं आसानी से हमारे कोड में कुछ उपयोगों को संभाल सकता हूं, लेकिन मानक लाइब्रेरी और बूस्ट यूज प्लेस प्लेस जगह पर नया है। तो परिभाषा से पहले बहुत सारी चीजों सहित इस वैश्विक स्तर को परिभाषित करना और संकलन धीमा करना।
तो क्या हमारे कोड में हेडर्स खींचने के बिना हमारे कोड में उपकरण आवंटन का कोई तरीका होगा क्योंकि उनमें प्लेसमेंट नया है और बिना किसी फाइल को ऊपर परिभाषित करने या DEBUG_NEW मैन्युअल रूप से लिखने के बिना?
प्रीकंपिल्ड हेडर वास्तव में हमारी स्थिति में बनाए रखने के लिए दर्द होगा। वे विभिन्न पोर्टेबिलिटी मुद्दों के कारण वास्तव में विशाल और जटिल होंगे (कोडबेस को 4 बहुत अलग प्लेटफ़ॉर्म के लिए संकलित किया गया है)। –
उन्हें किस तरह बनाए रखना मुश्किल होगा? पीएचसी बहुत बार बदलना चाहिए। –
यदि इसमें बूस्ट सामान शामिल है, तो यह अक्सर बदल जाएगा। लेकिन शायद मुझे इस मेमोरी डीबग हेडर को प्रीकंपलिंग करने का प्रयास करना चाहिए (जिसे '/ Fi' कंपाइलर विकल्प से इंजेक्शन दिया जाता है); नियुक्ति नया बहुत कम स्थानों में दिखाई देता है। –