के बाद स्थानीय चर का उपयोग करना मेरे पास एक कक्षा है जो एक संदर्भ गिनती तंत्र को नियोजित करती है। संदर्भ श्रेणी की संख्या शून्य पर गिरने पर इस वर्ग की वस्तुओं को अंततः delete this
पर कॉल करके नष्ट कर दिया जाता है। मेरा सवाल है: क्या मैं delete this
के बाद स्थानीय ऑन-स्टैक वैरिएबल का उपयोग कर सकता हूं?"इसे हटाएं"
class RefCountedClass
{
public:
RefCountedClass(Mutex& m) :
mutex_(m)
{}
.
.
.
private:
Mutex& mutex_;
void RemoveReference()
{
// As I understand, mutex_ will be destroyed after delete,
// but using m is all right because it is on-stack and
// references an external object. Am I right?
Mutex& m = mutex_;
m.Acquire();
--recount_;
if (refcount <= 0) delete this;
m.Release();
}
};
होने खुद वस्तुओं गिनती संदर्भ है एक बुरा विचार (यह अगर बता सकते है यह एक स्थिर जीवनकाल (ढेर) या गतिशील जीवनकाल (ढेर) चर है? इस प्रकार COM काम करता है और सी ++ समुदाय द्वारा प्राप्त अनुभवों से हम आगे बढ़े हैं; जैसा कि boost :: shared_ptr से देखा जा सकता है जहां संदर्भ गणना है संदर्भ के संदर्भ में ऑब्जेक्ट का हिस्सा नहीं है। –
@MartinYork मैं आपसे सहमत हूं। एक सामान्य मामले में मैं खुद को ऐसे लागू करने की सलाह नहीं दूंगा संदर्भ गिनती। हालांकि यह एक विशेष मामला है। सौभाग्य से, मेरी असली स्थिति में, निर्माता सार्वजनिक नहीं है और निर्माण कारखाने के वस्तु द्वारा संरक्षित है। मेरे द्वारा – FireAphis