मैं एक कॉलबैक समारोह के लिए कोड लिखने की जरूरत है (यह ATL के भीतर से बुलाया जाएगा, लेकिन जो वास्तव में महत्वपूर्ण नहीं है):क्या static_cast एक नल पॉइंटर को एक नल पॉइंटर में बदल सकता है?
HRESULT callback(void* myObjectVoid)
{
if(myObjectVoid == 0) {
return E_POINTER;
}
CMyClass* myObject = static_cast<CMyClass*>(myObjectVoid);
return myObject->CallMethod();
}
यहाँ
void*
CMyClass
के लिए सूचक होने की गारंटी है, इसलिए static_cast
कानूनी है । मेरी चिंता यह है कि कोड पोर्टेबल (कम से कम दृश्य C++ के नए संस्करणों के लिए) जितना संभव हो सके होना चाहिए। तो सुपर-पैरानोइक होने के लिए मैं CMyClass*
पॉइंटर को भी जांचने के इच्छुक हूं - मेरा मतलब है कि अगर यह शून्य हो जाता है तो क्या होगा?
if(myObjectVoid == 0) {
return E_POINTER;
}
CMyClass* myObject = static_cast<CMyClass*>(myObjectVoid);
if(myObject == 0) {
return E_POINTER;
}
दूसरा चेक उचित है? क्या गैर-शून्य पॉइंटर को शून्य सूचक में बदलने के लिए static_cast
के लिए यह संभव है?
क्यों न सिर्फ बिना शर्त डाली, और कलाकारों के बाद अशक्त के लिए जाँच? static_cast सूचक को कम करने के लिए नहीं जा रहा है। –
@ लोगन कैपल्दो: जितनी जल्दी हो सके जांचना बेहतर लगता है। – sharptooth