मैं पसंद करेंगे या तो इस:
std::unique_ptr<Solver> S ( UseDummySolver
? createDummySolver()
: new STPSolver(true) );
Solver& STP = *S;
या इस:
std::shared_ptr<Solver> S ( UseDummySolver
? createDummySolver()
: new STPSolver(true) );
std::shared_ptr<Solver> STP = S;
दोनों कोड तुम वहाँ मिल गया है के साथ एक समस्या से बचने के: हम करने के लिए जो सूचक तय करते हैं की जरूरत नहीं है ऑब्जेक्ट्स को छोड़ने पर delete
पर कॉल करें (या, वास्तव में, delete
पर कॉल करने की आवश्यकता को याद रखें)। इसके बजाए, हम तब तक प्रतीक्षा करते हैं जब तक वेरिएबल्स गुंजाइश न छोड़ें, फिर Solver
ऑब्जेक्ट स्वचालित रूप से हटा दिया जाता है। STP
पहले मामले में उभरा है, जबकि यह ऑब्जेक्ट तक पहुंचने का एक और तरीका है, जबकि यह दायरे में है, दूसरे मामले में यह ऑब्जेक्ट का एक स्वतंत्र "सह-मालिक" है और दोनों पॉइंटर्स स्वतंत्र रूप से फिर से असाइन किए जा सकते हैं।
यह एक * बहुत बदसूरत * एक बार में दो चर निर्दिष्ट करने का माध्यम है। * (जला कोड [आरएस] आग के साथ इस तरह) * – user7116
ऐसे कई कारण हैं जिनके लिए यह कोड स्पष्ट रूप से बेकार है। डबल असाइनमेंट हिस्सा उनमें से सिर्फ एक है। आरएआईआई का उपयोग नहीं करना एक और है। –
हां ... मुझे यह भी एहसास नहीं हुआ कि यह कानूनी है, और मैंने इसे पहले कभी नहीं देखा है! – steveha