Wikipedia कहता है:क्या सी ++ 0x अभी भी वैश्विक ऑपरेटर के साथ स्पष्ट रूप से आवंटित कर सकता है?
एक प्रकार असंभव बनाया जा सकता है नए ऑपरेटर के साथ आवंटित करने के लिए:
struct NonNewable { void *operator new(std::size_t) = delete; };
इस प्रकार के एक वस्तु ही कभी एक ढेर वस्तु के रूप में या किसी अन्य के एक सदस्य के रूप में आवंटित किया जा सकता है प्रकार। इसे गैर-पोर्टेबल चालबाजी के बिना सीधे ढेर-आवंटित नहीं किया जा सकता है। (के बाद से नियुक्ति नया ही तरीका है उपयोगकर्ता के आबंटित स्मृति पर एक निर्माता कॉल करने के लिए है और इस प्रयोग के ऊपर के रूप में मना कर दिया गया है, वस्तु ठीक से निर्माण नहीं किया जा सकता है।)
हटाया जा रहा है ऑपरेटर नई इसमें निजी बनाने के समान है वर्तमान सी ++, लेकिन स्पष्ट रूप से वैश्विक ऑपरेटर का उपयोग नहीं कर रहा है, जो वर्ग-विशिष्ट लुकअप से बचाता है, फिर भी वैध सी ++ 0x?
NonNewable *p = ::new NonNewable();
// neither non-portable nor trickery, though perhaps not widely known
क्या मुझे मसौदे में कुछ याद आया है?
स्पष्ट है कि, यह वैध सी ++ 03 और works fine है:
struct NonNewable {
private:
void *operator new(std::size_t); // not defined
};
int main() {
// ignore the leaks, it's just an example
void *mem = operator new(sizeof(NonNewable));
NonNewable *p = ::new(mem) NonNewable();
p = ::new NonNewable();
return 0;
}
FYI यदि आप जांच रहे हैं: उद्धृत टेक्स्ट विकिपीडिया आलेख से हटा दिया गया है। –