c++ - निर्माता प्रारंभिक सूची में परिपत्र निर्भरता



constructor initialization (1)

एन 4140 [क्लास सीडीटर] / 1 पढ़ता है:

एक गैर-तुच्छ कन्स्ट्रक्टर के साथ एक वस्तु के लिए, किसी भी गैर-स्थिर सदस्य या ऑब्जेक्ट के बेस क्लास का संदर्भ देने से पहले कंस्ट्रक्टर अनारक्षित व्यवहार में निष्पादन परिणाम शुरू होता है। अपरिभाषित व्यवहार में निष्पादन परिणामों को खत्म करने के बाद किसी भी गैर-स्थिर सदस्य या ऑब्जेक्ट के आधार वर्ग के संदर्भ में, एक गैर-क्षुद्र नाशक के साथ एक वस्तु के लिए।

हालांकि इस मार्ग का अर्थ यह नहीं है कि व्यवहार अन्यथा अच्छी तरह से परिभाषित है, निम्नलिखित उदाहरण से पता चलता है कि यह है। यहां एक अंश है:

struct B : public A { int j; Y y; }; // non-trivial
extern B bobj;
B* pb = &bobj; // OK

तो उत्तर है: हाँ, आपके मामले में व्यवहार ठीक तरह से परिभाषित किया जाता है यदि आप A के कंसट्रक्टर में सदस्यों या आधार वर्गों की बात नहीं कर रहे हैं।

निम्नलिखित अच्छी तरह से परिभाषित किया गया है?

class A;
class B;

// define A, which takes B& in constructor
// define B, which takes A& in constructor

class C
{
    A a;
    B b;
public:
    C() : a(b), b(a) { /* stuff with a and b */ }
}

Ideone.com पर पूर्ण उदाहरण

क्या यह सुरक्षित / अच्छी तरह से परिभाषित है, जब तक कि A और B लिए कंस्ट्रक्शर्स वे मिले संदर्भों के साथ कुछ नहीं करते?





initialization-list