2015-12-07 7 views
5

वहाँ अस्थायी रूप से हड़पने के लिए संसाधन के स्वामित्व weak_ptr एक द्वारा की ओर इशारा किया दो तरीके होने लगते हैं shared_ptr, nullptr लौटने के लॉक के साथ weak_ptr खाली है और shared_ptr कन्स्ट्रक्टर अपवाद फेंक रहा है।std :: weak_ptr: लॉक या shared_ptr कन्स्ट्रक्टर?</p> <ol> <li>उपयोग <code>lock()</code></li> <li>एक <code>shared_ptr</code> निर्माता को <code>weak_ptr</code> दर्रा</li> </ol> <p>इन दोनों एक उत्पादन:

तो सवाल यह है कि: कब एक या दूसरे का उपयोग किया जाना चाहिए? क्या इस से संबंधित सामान्य दिशानिर्देश या सर्वोत्तम प्रथाएं हैं?

उत्तर

7

से http://en.cppreference.com/w/cpp/memory/weak_ptr/lock

दोनों इस समारोह और std :: shared_ptr के निर्माता को कॉपी किया गया इस्तेमाल किया जा सकता प्रबंधित वस्तु एक std :: weak_ptr से जाना जाता के अस्थायी स्वामित्व प्राप्त करने के लिए। अंतर यह है कि std :: shared_ptr का कन्स्ट्रक्टर अपवाद फेंकता है जब इसकी std :: weak_ptr तर्क खाली है, जबकि std :: weak_ptr :: lock() एक खाली std :: shared_ptr बनाता है।

इससे मुझे विश्वास होता है कि आप यह चुनते हैं कि आप किस अपवाद को फेंकना चाहते हैं या नहीं। कन्स्ट्रक्टर का उपयोग तब किया जा सकता है जब कार्य हो, जबकि lock का उपयोग तब किया जा सकता है जब यह संभव हो कि यह काम नहीं करेगा और आप जांच सकते हैं।

संबंधित मुद्दे