2012-04-09 14 views
9

क्लास ऑब्जेक्ट में शून्य ऑब्जेक्ट में पॉइंटर कैसे डालें?सी ++ टाइपकास्ट: शून्य पॉइंटर से क्लास पॉइंटर

+0

आपको पहली जगह पॉइंटर कैसे मिला? आप कैसे जानते हैं कि यह वास्तव में किसी ऑब्जेक्ट पर इंगित कर रहा है? आप कैसे जानते हैं कि यह किस प्रकार की वस्तु पर इशारा कर रहा है? –

उत्तर

17

static_cast के साथ। ध्यान दें कि आपको केवल यह करना होगा यदि सूचक वास्तव में निर्दिष्ट प्रकार की वस्तु को इंगित करता है; यानी, पॉइंटर का मान void को पॉइंटर से ऐसी ऑब्जेक्ट में लिया गया था।

thing * p = whatever(); // pointer to object 
void * pv = p;   // pointer to void 
thing * p2 = static_cast<thing *>(pv); // pointer to the same object 

यदि आपको खुद को ऐसा करने की आवश्यकता है, तो आप अपने डिज़ाइन पर पुनर्विचार करना चाहेंगे। आप टाइप सुरक्षा को छोड़ रहे हैं, अमान्य कोड लिखना आसान बनाते हैं:

something_else * q = static_cast<something_else *>(pv); 
q->do_something(); // BOOM! undefined behaviour. 
+3

नहीं, यह सहायक नहीं है; यह गलत है। 'Reinterpret_cast' का प्रयोग करें। –

+0

@ मार्सेलो कैंटोस: आप जिसकी आवश्यकता है उससे भी ज्यादा खतरनाक कास्ट का उपयोग क्यों करेंगे? –

+2

+1 @ मार्सेलो कैंटोस: नहीं, यह वास्तव में सही है। 'static_cast' का उपयोग शून्य रूपांतरण के लिए निहित रूपांतरणों और वर्ग सूचक को उल्टा करने के लिए किया जाता है, यह एक अंतर्निहित रूपांतरण है। –

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