में स्मार्ट पॉइंटर असाइन करें मैं C++ 11 unique_ptrs का उपयोग करने के लिए कुछ पूर्व C++ 11 कोड अपडेट कर रहा हूं।स्थिति या लूप
एक बात मुझे यकीन नहीं है कि कैसे संभालना है, जब पुराना कोड एक शर्त के रूप में सूचक असाइनमेंट का उपयोग कर रहा था। जैसे
std::unique_ptr<Object> obj;
while (obj.reset(C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT()))
{
// do something with obj
}
तो, unique_ptrs उपयोग करने के लिए इस कोड को उन्नत करने के लिए स्पष्ट तरीका बताया गया है:
Object* obj;
while (obj = C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT())
{
// do something with obj
delete obj;
}
यह देखते हुए कि std :: unique_ptr :: रीसेट कोई वापसी महत्व है, यह इस सीधे करने के लिए अनुवाद करने के लिए संभव नहीं है ? सबसे अच्छा मैं के साथ आ सकता है:
std::unique_ptr<Object> obj;
obj.reset( C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT());
while (obj)
{
// do something with obj
obj.reset( C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT());
}
लेकिन उस पुस्तकालय समारोह है, जो आदर्श मैं से बचने के लिए चाहते हैं, उसके गंदा डबल कॉल कहते हैं।
आप सी ++ 17 उपयोग कर रहे थे, तो यह अनुमति देता है: 'जबकि (obj.reset (LIBRARY_CALL()); obj)' – aschepler
@aschepler: अब क्या? –
'C_LIBRARY_CALL_WHICH_RETURNS_NEW_OBJECT' जिसे आप हटाते हैं? यह संदिग्ध है। – StoryTeller