2009-11-11 17 views
13

boost::make_shared अब अप्रचलित है? 1.35 में इसकी परिभाषा नहीं मिली है।बढ़ावा है :: make_shared अप्रचलित अब?

+1

विडंबना यह है कि यहां आने वाले ज्यादातर लोग शायद सोच रहे हैं (जैसे खुद) अगर यह अप्रचलित है क्योंकि यह सी ++ 11 में है। (संक्षिप्त उत्तर: हाँ, आप std :: संस्करणों का उपयोग कर सकते हैं।) – patrickvacek

+0

... जब तक कि आपको प्री-सी ++ 11 प्लेटफॉर्म पर संगतता रखने की आवश्यकता न हो, उस स्थिति में बूस्ट स्मार्ट पॉइंटर्स * वास्तव में * अच्छा लाभ हैं। – DevSolar

उत्तर

12

इसके 1.4 डॉक्स में: http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/make_shared.html

यह संस्करण में जोड़ दिया गया है करने के लिए 1.39

+0

धन्यवाद रयान। क्या यह पता लगाने का कोई तरीका है कि यह किस संस्करण को पेश किया गया है? – Steve

+0

smart_ptr दस्तावेज़ में एक इतिहास अनुभाग है जो आपको जो चाहिए उसे ढूंढने में आपकी सहायता कर सकता है: http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/smart_ptr.htm#History –

+7

यह सी ++ का भी हिस्सा है 0x –

2

आज अनुसंधान का एक सा था प्रकट होता है, और यह है कि वास्तव में make_shared 1.36.0 को जोड़ा गया है लगता है (1.35 में .0 ऐसा कोई हेडर नहीं है), लेकिन दिलचस्प बात यह है कि इस बदलाव के बारे में नया क्या है इसका कोई भी उल्लेख नहीं है - कम से कम मुझे यह नहीं मिला

26

std :: make_shared सी ++ 11 में भी उपलब्ध है । कृपया ध्यान दें कि make_shared सुविधा सुविधा से अधिक है। निम्न उदाहरण में:

make_shared<foobar>(1, 2); 
shared_ptr<foobar>(new foobar(1, 2)); 

दोनों बयान एक foobar वस्तु बना सकते हैं और एक shared_ptr का निर्माण। हालांकि, पूर्व साझा काउंटर के लिए स्मृति आवंटन से बचाता है, क्योंकि काउंटर और फोबबार ऑब्जेक्ट के लिए एक मेमोरी खंड का उपयोग किया जाएगा। बाद के कथन के साथ यह संभव नहीं है, क्योंकि shared_ptr का निर्माण करने से पहले foobar की स्मृति आवंटित की जाती है।

मैं क्या कहना चाहता हूं: नहीं, make_shared अप्रचलित नहीं है, क्योंकि यह एक बहुत ही उपयोगी अनुकूलन प्रदान करता है।

+7

सी ++ 11 में, 'std :: make_shared'' वास्तव में ऑब्जेक्ट बनाने पर प्रदर्शन अनुकूलन है, फिर' 'std :: shared_ptr'' बना रहा है, क्योंकि यह केवल प्रदर्शन करता है दो की बजाय एक स्मृति आवंटन। – Sean

+2

एक और महत्वपूर्ण अंतर धागा सुरक्षा है। दूसरे उदाहरण में, 'shared_ptr'' ctor फेंक सकता है जबकि नेस्टेड नए द्वारा आवंटित foobar जारी नहीं किया जाएगा। –

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