2011-03-23 18 views
19

के लिए ऑपरेटर ओवरलोडिंग नया जब हम किसी वर्ग के नए ऑपरेटर को अधिभारित करते हैं, तो हम फ़ंक्शन को सदस्य फ़ंक्शन के रूप में घोषित करते हैं। उदाहरण के लिए:कक्षा

class OpNew { 
public: 
    OpNew() { cout << "OpNew::OpNew()" << endl;} 
    void* operator new(size_t sz) { 
     cout << "OpNew::new: " 
      << sz << " bytes" << endl; 
     return ::new char[sz]; 
    } 
}; 

कैसे हुड के नीचे बयान OpNew *obj = new OpNew काम करता है? चूंकि ओवरलोडेड नया ओपन न्यू क्लास का सदस्य स्थिर नहीं है। तो संकलक कैसे इस कॉल को new सदस्य फ़ंक्शन सफल बनाता है?

+2

यह * स्थिर होना चाहिए। –

+0

मुझे आशा है कि आप 'ऑपरेटर डिलीट' को भी ओवरलोड करें, अन्यथा आपको अपरिभाषित व्यवहार मिल गया है। – sharptooth

+0

बेशक मैंने किया, वह सिर्फ एक स्निपेट था :) –

उत्तर

32

An operator new() or operator new[]() for a class is always a static class member, even if it is not declared with the keyword static.

क्या सी ++ मानक का कहना है (मसौदा n3242), अनुभाग [class.free] में:

किसी भी आवंटन समारोह एक वर्ग T के लिए एक स्थिर सदस्य (भले ही स्पष्ट रूप से static घोषित नहीं) है।

+0

बिंदु बताता है! धन्यवाद। –