class A;
class B {
public:
B(A& a) : a(a) {}
private:
A& a;
};
/* Method 1 */
/* warning C4355: 'this' : used in base member initializer list */
/*
class A {
public:
A() : b(*this) {}
private:
B b;
};
*/
/* Method 2 */
/* But I need to manually perform memory dellocation. */
class A {
public:
A() { b = new B(*this); }
~A() { delete b; }
private:
B* b;
};
int main() {
}
वर्तमान में आधार सदस्य प्रारंभकर्ता सूची में प्रयोग किया जाता है, जब मैं बी में संदर्भ को प्रारंभ करने का प्रयास करें, मैं विधि 1. हालांकि, विधि 1 इच्छा झंडा मुझे चेतावनी उपयोग कर रहा हूँ जो समझ में आता हैप्रारंभ एक संदर्भ - चेतावनी C4355: 'इस':
इसलिए, मुझे गतिशील स्मृति आवंटन का उपयोग करके विधि 2 का उपयोग करके वापस गिरना होगा।
क्या मैन्युअल मेमोरी आवंटन/डेलोकेशन की आवश्यकता के बिना मैं कोई बेहतर तरीका उपयोग कर सकता हूं (ठीक है। मुझे स्मार्ट पॉइंटर पता है)?
मैं विधि 1 पसंद करता हूं, बस मुझे चेतावनी के साथ सहज नहीं है।