से आभासी समारोह कॉलिंग मैं निम्नलिखित के व्यवहार के रूप में उत्सुक हूँ:सदस्य निर्माता
#include <iostream>
#include <string>
struct A;
struct B {
std::string b;
B(A& a);
};
struct A {
B member;
virtual std::string f() { return "Hello, World!"; }
A() : member(*this) {}
};
B::B(A& a) : b(a.f()) {}
int main() {
std::cout << A().member.b;
}
इस आवश्यक अपेक्षित परिणाम मुद्रित करने के लिए है? या यह अनिर्धारित व्यवहार है?
मुझे यह अधिकार कभी नहीं मिला .. यह कैसे लागू नहीं होता है? 'ए.एफ()' एक्स की पूरी वस्तु को संदर्भित करना चाहिए। क्या मैं इसे गलत पढ़ रहा हूँ? –
@ मार्को। यूबी केवल तभी होता है जब यह 'x' या उस ऑब्जेक्ट के बेस क्लास सबोबजेक्ट्स ** की पूरी ऑब्जेक्ट को संदर्भित करता है लेकिन 'x' या इसके बेस क्लास सबबजेक्ट्स में से एक नहीं **। इस मामले में, निर्माण के तहत प्रासंगिक वस्तु एक 'ए' है, और ऑब्जेक्ट अभिव्यक्ति निर्माण के तहत वस्तु को संदर्भित करती है, इसलिए व्यवहार अच्छी तरह परिभाषित है। –
मेरी मदद करने के लिए धन्यवाद: 'किसी ऑब्जेक्ट जो किसी अन्य ऑब्जेक्ट का सबबोजेक्ट नहीं है उसे पूर्ण ऑब्जेक्ट कहा जाता है।', तो यहां एक पूर्ण वस्तु का जिक्र नहीं है? –