तो एक unique_ptr
इस तरह आरंभ:std :: unique_ptr :: रीसेट और निर्माता अपवाद
std::unique_ptr<Foo> i;
i.reset(new Foo());
लेकिन कोई अपवाद Foo::Foo()
से फेंक दिया जाता है, सवाल यह है: क्या आबंटित स्मृति के साथ क्या होता है? अद्वितीय_ptr इसे लीक होने से कैसे बचाता है? क्या यह new
ऑपरेटर के अंदर संभाला गया है?
जब दायरा निकलता है तो विनाशक निश्चित रूप से बुलाया जाएगा। चूंकि reset
कॉल new Foo()
रिटर्न तक लागू नहीं किया गया है, ऐसा लगता है कि अपवाद स्मृति को मुक्त करके आवंटित स्मृति को मुक्त करके new
द्वारा इसे संभाला जाना चाहिए।
क्या ऐसा होता है?
देखें http://stackoverflow.com/questions/4094996/what-happens-to-the-memory-allocated-by-new-if-the-constructor-throws – Jon