stl_construct.h
में निम्नलिखित कार्य हैं:
template<typename _T1, typename _T2>
inline void
_Construct(_T1* __p, const _T2& __value)
{
::new(static_cast<void*>(__p)) _T1(__value);
}
मैं जानना चाहता हूं कि __p
से void*
को कास्ट करना क्यों आवश्यक है, क्या इसका कोई फायदा है?
3 जवाब
यह गारंटी देता है कि हस्ताक्षर void* operator new(std::size_t, _T1*)
के साथ उपयोगकर्ता कोड द्वारा वैश्विक नाम स्थान में जोड़े गए किसी भी अधिभार के बजाय पूर्व-निर्धारित प्लेसमेंट नए ऑपरेटर को बुलाया जाता है।
यह सुनिश्चित करता है कि संभावित रूप से _T1* कास्ट ऑपरेटर अनजाने में निष्पादित नहीं होता है
यह सुनिश्चित करता है कि कोई भी void* operator new(size_t, _T1*);
उस नए प्लेसमेंट के रास्ते में न आए जिसे वह करने का प्रयास कर रहा है।
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।