2011-06-10 32 views
7

सी ++ में, जब आप नीचे जो देखते हैं, तो कुछ करने पर, निर्माण की व्यवस्था की गारंटी है?सदस्य फ़ील्ड, निर्माण का आदेश

Logger::Logger() 
    : kFilePath_("../logs/runtime.log"), logFile_(kFilePath_) 
{ 
    // ... 
} 
+1

क्या यह 'logFile_ (kFilePath_)' होना चाहिए? – derobert

उत्तर

26

हां, निर्माण के आदेश की हमेशा गारंटी है। हालांकि, यह ऑर्डर के समान नहीं है जिसमें ऑब्जेक्ट प्रारंभकर्ता सूची में दिखाई देता है।

सदस्य चर का निर्माण उस क्रम में किया जाता है जिसमें उन्हें कक्षा के शरीर में घोषित किया जाता है। उदाहरण के लिए:

struct A { }; 
struct B { }; 

struct S { 
    A a; 
    B b; 

    S() : b(), a() { } 
}; 

a पहले का निर्माण किया है, तो b। जिस क्रम में सदस्य चर सूची प्रारंभकर्ता सूची में प्रकट होता है वह अप्रासंगिक है।

9

निर्माण का आदेश कक्षा परिभाषा में घोषणा का आदेश है।

यदि ctor-initializer में ऑर्डरिंग भिन्न है, तो यह निर्माण के आदेश को प्रभावित नहीं करता है। आपका कंपाइलर इस पर चेतावनी दे सकता है।

देखें 12.6.2/5 (2003 शब्दों, [class.base.init] नाम):

nonstatic डेटा सदस्यों जा क्रम में वे के आदेश की परवाह किए बिना फिर से वर्ग परिभाषा (में घोषित किया गया में प्रारंभ होगा मेम-प्रारंभकर्ता)।

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