যেমন আপনি নিজে বলেছেন, std::dynarray
একটি স্থির-আকারের গতিশীল অ্যারের জন্য। এটি আকার পরিবর্তনযোগ্য নয়। এটা তোলে মোটামুটিভাবে একটি উন্নতি উপর কথা বলছে new T[N]
এবং উপর std::unique_ptr<T[]>(new T[N])
।
ক্ষমতার আকার পরিবর্তন বা পরিচালনা করার দরকার নেই এর অর্থ আপনি কম জটিলতা সহ কম জায়গায় ডেটা কাঠামো বাস্তবায়ন করতে পারেন।
তদুপরি, std::dynarray
একটি অদ্ভুত প্রাণী যা বাস্তবায়নটিকে বিভিন্ন, অ-নির্দিষ্ট উপায়ে প্রয়োগ করতে সহায়তা করে, উদাহরণস্বরূপ স্ট্যাকের মধ্যে অ্যারে রাখা সম্ভব। একটি বরাদ্দ ফাংশন কল করা "alচ্ছিক"। আপনি অ্যারের উপাদানগুলি তৈরি করতে একটি বরাদ্দকারীকে নির্দিষ্ট করতে পারেন, তবে এটি কোনও ধরণের অংশ নয়।
আপনিও ভাবতে পারেন যে আমাদের কেন std::dynarray
এবং পরিবর্তনশীল দৈর্ঘ্যের অ্যারেগুলি প্রয়োজন। সি ++ 14 এর ভিএলএলগুলি অনেক বেশি বিধিনিষেধযুক্ত; এগুলি কেবল স্থানীয়, স্বয়ংক্রিয় ভেরিয়েবলগুলি হতে পারে এবং বরাদ্দ নীতি নির্দিষ্ট করার কোনও উপায় অফার করতে পারে না এবং অবশ্যই তাদের কোনও মানক ধারক ইন্টারফেস নেই।
"বর্তমান খসড়া" এর 23.3.4.2 এর কিছু উদাহরণ (এটি ধরুন, গুগল ক্যাশে):
explicit dynarray(size_type c);
প্রভাব:c
উপাদানগুলির জন্য স্টোরেজ বরাদ্দ করে। বিশ্বব্যাপী ডাকতে পারে বা নাও পারে operator new
।
template <class Alloc>
dynarray(size_type c, const Alloc& alloc);
প্রভাবসমূহ: প্রতিটি উপাদান ব্যবহার-বরাদ্দকারী নির্মাণের সাহায্যে নির্মিত হয় ব্যতীত পূর্ববর্তী নির্মাণকারীদের সমতুল্য ।
আপনি অ্যারে উপাদানগুলি তৈরির জন্য প্রদত্ত বরাদ্দ ব্যবহার করতে পারেন বা না তা বিশ্বব্যাপী বৈশিষ্ট্য:
টেমপ্লেট কাঠামো Use_allocator, Alloc>: true_type {};
প্রয়োজনীয়: Alloc
একজন বরাদ্দকারী হতে হবে (17.6.3.5)। [ দ্রষ্টব্য: এই বৈশিষ্ট্যের বিশেষায়িতকরণ অন্যান্য লাইব্রেরির উপাদানগুলিকে অবহিত করে dynarray
যা একটি বরাদ্দকারী দিয়ে তৈরি করা যেতে পারে, যদিও এতে নেস্টেড বরাদ্দকারী_প্রকার নেই]]
সম্পাদনা: জোনাথন ভেকলির উত্তরটি আরও বেশি প্রামাণিক এবং অন্তর্দৃষ্টিযুক্ত হতে বাধ্য।