मुझे लगता है कि कक्षा को लपेटना सबसे आसान विकल्प होगा। रेफ काउंटर से सीधे विरासत में रहने की बजाय एक मध्यस्थ वर्ग बनाएं।
struct RefCounterVirtPrivate_
{
int count;
RefCounterVirt()
: count(0)
{ }
};
struct RefCounter : public virtual RefCounterVirtPrivate_
{
};
struct A : public RefCounter { };
struct B : public RefCounter { };
struct C : public A, public B { };
फिर सब कुछ आभासी inheritence के बारे में देखभाल करने के लिए किसी भी आवश्यकता के बिना RefCounter
से विरासत कर सकते हैं। आपको किसी मौजूदा कोड को भी बदलने की ज़रूरत नहीं है - RefCounter
का आभासी उत्तराधिकारी स्वयं हानिरहित होना चाहिए।
यह निश्चित रूप से गारंटी नहीं देता है कि लोगों को RefCounterVirtPrivate_
से सीधे प्राप्त नहीं होता है, लेकिन इसलिए मैंने इसे एक स्पष्ट नाम दिया है। virtual
कीवर्ड भूलने से गलती से ऐसा करना मुश्किल है।
स्रोत
2011-12-19 11:29:18
वास्तव में यह कक्षा हर समय इसे 'हटा देती है', इसलिए मैं 'addref() '/' रिलीज() 'में चेक कर सकता था। तो चालबाजी का स्वागत है। – sharptooth