2011-04-10 7 views
25

मैं अपने साझा_पॉइंटर (NULL के समतुल्य) के लिए डिफ़ॉल्ट मान के रूप में reset() का उपयोग कर रहा हूं।boost Shared_pointer NULL

लेकिन मैं कैसे जांचूं कि साझा_पोइंटर NULL है या नहीं?

क्या यह सही मूल्य लौटाएगा?

boost::shared_ptr<Blah> blah; 
blah.reset() 
if (blah == NULL) 
{ 
    //Does this check if the object was reset() ? 
} 

उत्तर

33

उपयोग:

if (!blah) 
{ 
    //This checks if the object was reset() or never initialized 
} 
8

तुम सिर्फ एक बूलियन के रूप में सूचक परीक्षण कर सकते हैं: अगर यह गैर-शून्य और false है यह true करने का मूल्यांकन करेंगे अगर यह रिक्त है:

if (!blah) 

boost::shared_ptr और std::tr1::shared_ptr दोनों सुरक्षित-बूल मुहावरे को लागू करते हैं और सी ++ 0x के std::shared_ptr एक स्पष्ट bool सी लागू करता है उलटा ऑपरेटर। ये shared_ptr को कुछ परिस्थितियों में बूलियन के रूप में उपयोग करने की अनुमति देते हैं, इसी तरह सामान्य पॉइंटर्स को बूलियन के रूप में कैसे उपयोग किया जा सकता है।

5

के रूप में boost::shared_ptr<> के class synopsis दिखाया गया है, वहाँ एक सुरक्षित-bool ऑपरेटर मौजूद है:

operator unspecified-bool-type() const; // never throws 

तो, shared_ptr<> का उपयोग के रूप में यद्यपि यह थे एक bool:

if (!blah) 
{ 
    // this has the semantics you want 
} 
9

if blah == NULL तरीके से कार्य करेंगे । कुछ लोग इसे बूल के रूप में परीक्षण करने के लिए पसंद करेंगे (if !blah) क्योंकि यह अधिक स्पष्ट है। अन्य उत्तरार्द्ध पसंद करते हैं क्योंकि यह छोटा है।