আমি দৃ strongly়ভাবে গ্রহণযোগ্য উত্তরের আত্মার সাথে একমত হতে পারি না। "শেষ অবলম্বনের একটি সরঞ্জাম"? অনেক দূরে!
আমি যেভাবে দেখছি, সি ++ এর তুলনায় সি ++ এর অন্যতম শক্তিশালী বৈশিষ্ট্য হ'ল সীমাবদ্ধতা প্রকাশ করার দক্ষতা যাতে সেগুলি সংকলনের সময় পরীক্ষা করা যায় এবং দুর্ঘটনাজনিত অপব্যবহার রোধ করা যায়। সুতরাং কোনও কাঠামো ডিজাইন করার সময়, নিজেকে জিজ্ঞাসা করুন এটির কী অপারেশনগুলির অনুমতি দেওয়া উচিত। অন্যান্য সমস্ত ব্যবহার নিষিদ্ধ করা উচিত, এবং সর্বোত্তম যদি এই ধরনের বিধিনিষেধগুলি স্থিতিশীলভাবে প্রয়োগ করা যায় (সংকলন সময়ে) যাতে অপব্যবহারের ফলে সংকলন ব্যর্থ হয়।
সুতরাং যখন কারোর জন্য অ্যারের প্রয়োজন হয়, নিম্নলিখিত প্রশ্নের উত্তরগুলি তার আচরণটি নির্দিষ্ট করে: ১. এর আকার ক) রানটাইম এ গতিশীল, বা খ) স্থির, তবে কেবল রানটাইমেই পরিচিত, বা গ) স্থির এবং সংকলনের সময় পরিচিত? 2. অ্যারে স্ট্যাকের উপর বরাদ্দ করা যেতে পারে বা না?
এবং উত্তরের উপর ভিত্তি করে, এটি আমি এ জাতীয় অ্যারের জন্য সেরা ডেটা কাঠামো হিসাবে দেখছি:
Dynamic | Runtime static | Static
Stack std::vector unique_ptr<T[]> std::array
Heap std::vector unique_ptr<T[]> unique_ptr<std::array>
হ্যাঁ, আমি মনে করি unique_ptr<std::array>
এটিও বিবেচনা করা উচিত, এবং উভয়ই সর্বশেষ সমাধানের একটি সরঞ্জাম নয়। আপনার অ্যালগরিদমের সাথে কী সেরা ফিট করে তা ভাবুন।
এগুলি সমস্ত ডেটা অ্যারে ( vector.data()
/ array.data()
/ uniquePtr.get()
) এর কাঁচা পয়েন্টারের মাধ্যমে প্লেইন সি এপিআইগুলির সাথে সামঞ্জস্যপূর্ণ ।
পিএস উপরোক্ত বিবেচনাগুলি বাদে মালিকানার একটিও রয়েছে: std::array
এবং std::vector
মান শব্দার্থক (মান দ্বারা অনুলিপি করা এবং পাস করার জন্য স্থানীয় সমর্থন রয়েছে) রয়েছে, তবে unique_ptr<T[]>
কেবল স্থানান্তরিত হতে পারে (একক মালিকানা প্রয়োগ করে)। হয় বিভিন্ন পরিস্থিতিতে কার্যকর হতে পারে। বিপরীতে, সাধারণ স্ট্যাটিক অ্যারে ( int[N]
) এবং সরল গতিশীল অ্যারে ( new int[10]
) প্রস্তাব দেয় না এবং তাই সম্ভব হলে এড়ানো উচিত - যা বেশিরভাগ ক্ষেত্রেই সম্ভব হওয়া উচিত। যদি এটি পর্যাপ্ত পরিমাণে না ছিল, সরল গতিশীল অ্যারেগুলি তাদের আকারটি জিজ্ঞাসা করার কোনও উপায়ও দেয় না - মেমরির দুর্নীতি এবং সুরক্ষা গর্তের জন্য অতিরিক্ত সুযোগ।
std::shared_ptr<T[]>
, তবে এটি থাকা উচিত এবং সম্ভবত কেউ C ++ 14 এ থাকবেন যদি কেউ প্রস্তাব উত্থাপন করতে বিরক্ত হতে পারে। গড় সময়ে, সবসময় আছেboost::shared_array
।