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।