2009-03-12 12 views
8

में हटाएं मैं वैश्विक ऑपरेटर को अधिभारित करने और प्रदर्शन संवेदनशील एप्लिकेशन के लिए हटाए जाने की कोशिश कर रहा हूं। मैं चिंताओं http://www.informit.com/articles/article.aspx?p=30642&seqNum=3 में वर्णित और सिफारिशों को पढ़ लिया है पहली बार के लिए जब से मैं नई ओवरलोडिंग हूँ इंटेल TBB के संभाजक http://www.intel.com/technology/itj/2007/v11i4/5-foundations/5-memory.htmग्लोबल ऑपरेटर को अधिभारित करना/सी ++

का उपयोग करें और नष्ट करने के लिए, मैं कुछ प्रश्न हैं।

क्या मुझे अपना नया हेडर Allocator.h (या Pre.h) शामिल करना चाहिए जिसमें "नई" कॉल वाली सभी फ़ाइलों में अधिभारित नया फ़ंक्शन शामिल है? यह थकाऊ है।

या मुझे "gcc -include Allocator.h ..." का उपयोग करना चाहिए जिसमें प्रत्येक अनुवाद इकाई में Allocator.h (पहले) शामिल है? मैं जितना संभव हो सके कोड मंच को स्वतंत्र रखना चाहता हूं। क्या सभी कंपाइलर्स "gcc -include" के समान कुछ समर्थन करते हैं?

उत्तर

14

यदि आप वैश्विक operator new और operator delete अधिभारित करना चाहते हैं, तो आपको बस इसे लागू करने की आवश्यकता है। आपको इसे हर जगह स्पष्ट रूप से परिभाषित करने की आवश्यकता नहीं है क्योंकि इसे पहले से ही भाषा के हिस्से के रूप में परिभाषित किया गया है।

संपादित करें: यदि आप एक ऑपरेटर को परिभाषित करना चाहते हैं जो विभिन्न पैरामीटर लेता है, तो आपको इसे हर जगह शामिल करना होगा। हालांकि आप यह करते हैं कि आप पर निर्भर है; यह ज्यादातर शैली का मामला है।

और भूल नहीं है वैश्विक ऑपरेटर के सभी वेरिएंट नया लागू करने और नष्ट करने के लिए: new, new[], delete, delete[], और std::nothrow वेरिएंट।

2

यदि आप विजुअल स्टूडियो का उपयोग कर रहे हैं और प्रीकंपिल्ड हेडर का उपयोग कर रहे हैं, तो आप वहां शामिल कर सकते हैं। मुझे लगता है कि जीसीसी के प्रीकंपिलिंग हेडर के कुछ रूप भी हैं, जो आपके संकलन के समय में भी सुधार करेंगे।

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