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
।