2012-03-28 18 views
5

संभव डुप्लिकेट:
Do static members of a class occupy memory if no object of that class is created?
Memory Allocation of Static Members in a Classवर्ग के अपने प्रकार के स्थिर वर्ग के सदस्य

"एक वर्ग में परिभाषित नहीं माना जाता है तक अपने वर्ग शरीर पूरा हो गया है, एक वर्ग नहीं हो सकता अपने स्वयं के प्रकार के डेटा सदस्य। एक वर्ग में डेटा सदस्य हो सकते हैं जो पॉइंटर्स/संदर्भ के अपने प्रकार के होते हैं। "

  • सी ++ प्राइमर (Lippman Lajoie)

भावना बनाता है।

लेकिन फिर इसकी अनुमति क्यों है?

class justAClass 
{ 
    public : 
    justAClass(); 

    private :   
    static justAClass justAMember; 
} 

पॉइंटर्स के लिए यह समझ में आता है। लेकिन यह उपरोक्त चीज़ कैसे काम करेगी? मैं इस तरह के वर्ग की वस्तु के लिए आकार का फैसला कैसे करूं? क्या यह एक पुनरावर्ती मामला नहीं है (बिना आधार शर्त के) अपने स्वयं के सदस्य होने के लिए, भले ही यह स्थैतिक है?

+0

स्टेटिक सदस्य डेटा कक्षा के आकार में योगदान नहीं देता है। –

उत्तर

6

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

आपके मामले के लिए, स्थैतिक वर्ग सदस्य कक्षा वस्तु में नहीं रहता है, इसलिए वर्ग वस्तु के आकार पर कोई प्रभाव नहीं पड़ता है। यह ठीक है।

3

औपचारिक रूप से, भेद यह है कि कक्षा में एक स्थिर सदस्य की घोषणा परिभाषा नहीं है। आपको कहीं और परिभाषा (बिल्कुल एक बार) प्रदान करनी होगी, और संकलक को परिभाषा का सामना करने तक आकार को जानने की आवश्यकता नहीं है। स्टेटिक सदस्य वर्ग के आकार पर ही प्रभाव नहीं डालते हैं। (कई मायनों में, वर्ग में स्थिर सदस्य घोषणा extern गैर-सदस्य घोषणा की तरह है।)

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