std::make_unique
মানক সি ++ 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
।