मुझे बताया गया था कि निम्न कोड में C ++ 20 तक अपरिभाषित व्यवहार है:
int *p = (int*)malloc(sizeof(int));
*p = 10;
क्या यह सच है?
तर्क यह था कि int
वस्तु का जीवनकाल उसके मूल्य ( P0593R6 ) को निर्दिष्ट करने से पहले शुरू नहीं किया जाता है । समस्या को ठीक करने के लिए, प्लेसमेंट new
का उपयोग किया जाना चाहिए:
int *p = (int*)malloc(sizeof(int));
new (p) int;
*p = 10;
क्या हमें वास्तव में एक डिफ़ॉल्ट निर्माता को कॉल करना है जो वस्तु के जीवनकाल को शुरू करने के लिए तुच्छ है?
उसी समय, कोड का शुद्ध सी में अपरिभाषित व्यवहार नहीं होता है। लेकिन, क्या होगा अगर मैं int
सी कोड में आवंटित करता हूं और सी ++ कोड में इसका उपयोग करता हूं ?
// C source code:
int *alloc_int(void)
{
int *p = (int*)malloc(sizeof(int));
*p = 10;
return p;
}
// C++ source code:
extern "C" int *alloc_int(void);
auto p = alloc_int();
*p = 20;
क्या यह अभी भी अपरिभाषित व्यवहार है?
int
? के लिए नहींstd::string
? हाँ।