std::make_uniqueमानक C ++ 11 लाइब्रेरी में कोई फ़ंक्शन टेम्पलेट क्यों नहीं है ? मुझे लगता है
std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
थोड़ी क्रिया। निम्नलिखित बहुत अच्छा नहीं होगा?
auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
यह newअच्छी तरह से छुपाता है और केवल एक बार प्रकार का उल्लेख करता है।
वैसे भी, यहाँ मेरा प्रयास है make_unique:
template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
std::forwardसामान संकलित करने में मुझे काफी समय लगा , लेकिन अगर यह सही है तो मुझे यकीन नहीं है। क्या यह? वास्तव में क्या std::forward<Args>(args)...मतलब है? संकलक क्या करता है?
make_uniqueएक कस्टम डिलेटर के साथ पैरामीटर बनाने के लिए समझ में आता है , क्योंकि स्पष्ट रूप से यह सादे पुराने के माध्यम से आवंटित होता है newऔर इसलिए सादे पुराने का उपयोग करना चाहिएdelete :)
make_uniqueतक सीमित होगा new... ठीक है, यह ठीक है यदि आप इसे लिखना चाहते हैं, लेकिन मैं देख सकता हूं कि ऐसा कुछ क्यों मानक का हिस्सा नहीं है।
make_uniqueटेम्पलेट का उपयोग करना पसंद करता हूं क्योंकि कंस्ट्रक्टर std::unique_ptrस्पष्ट है, और इस प्रकार यह unique_ptrएक फ़ंक्शन से लौटने के लिए क्रिया है। इसके अलावा, मैं नहीं बल्कि प्रयोग करेंगे auto p = make_unique<foo>(bar, baz)की तुलना में std::unique_ptr<foo> p(new foo(bar, baz))।
unique_ptrएक दूसरा टेम्पलेट पैरामीटर लेता है जिसे आपको किसी भी तरह से अनुमति देना चाहिए - वह इससे अलग हैshared_ptr।