বিপরীতে, আপনার সর্বদা স্ট্যাক বরাদ্দের পছন্দ করা উচিত, যে পরিমাণে থাম্বের নিয়ম হিসাবে আপনার ব্যবহারকারীর কোডে কখনও নতুন / মুছে ফেলা উচিত নয়।
আপনি যেমনটি বলেছেন, যখন স্ট্যাকের উপর ভেরিয়েবলটি ঘোষণা করা হয়, যখন সুযোগ থেকে বাইরে চলে যায় তখন এর ডেস্ট্রাক্টরকে স্বয়ংক্রিয়ভাবে ডেকে আনা হয়, যা সম্পদ আজীবন ট্র্যাকিং এবং ফাঁস এড়ানোর জন্য আপনার প্রধান সরঞ্জাম।
সুতরাং সাধারণভাবে, প্রতিবার আপনার যখন কোনও রিসোর্স বরাদ্দ করা দরকার, এটি মেমরি (নতুন কল করে), ফাইল হ্যান্ডলগুলি, সকেট বা অন্য যে কোনও কিছু হোক না কেন, এটি এমন একটি ক্লাসে আবদ্ধ করুন যেখানে কনস্ট্রাক্টর রিসোর্সটি অর্জন করে এবং ডেস্ট্রাক্টর এটি প্রকাশ করে। তারপরে আপনি স্ট্যাকের উপর এই ধরণের একটি অবজেক্ট তৈরি করতে পারেন এবং আপনার গ্যারান্টিযুক্ত যে আপনার উত্সটি সুযোগের বাইরে চলে গেলে মুক্তি পাবে। আপনি মেমরি ফাঁস এড়ানো নিশ্চিত করতে আপনার সর্বত্র আপনার নতুন / মোছা জোড়া ট্র্যাক করতে হবে না।
এই প্রতিমাটির সর্বাধিক প্রচলিত নাম হ'ল RAII
স্মার্ট পয়েন্টার ক্লাসগুলিও দেখুন যা বিরল ক্ষেত্রে ফলাফল পয়েন্টারগুলিকে মোড়ানোর জন্য ব্যবহৃত হয় যখন আপনাকে কোনও উত্সর্গীকৃত আরআইআই অবজেক্টের বাইরে নতুন কিছু বরাদ্দ করতে হয়। পরিবর্তে আপনি পয়েন্টারটিকে একটি স্মার্ট পয়েন্টারে পাস করেন, যা এরপরে তার জীবদ্দশাকে ট্র্যাক করে, উদাহরণস্বরূপ রেফারেন্স গণনা দ্বারা এবং সর্বশেষ রেফারেন্সটি সুযোগের বাইরে চলে গেলে ডেস্ট্রাক্টরকে কল করে। স্ট্যান্ডার্ড লাইব্রেরিতে std::unique_ptr
সাধারণ স্কোপ-ভিত্তিক পরিচালনার জন্য রয়েছে এবং std::shared_ptr
যা ভাগ করে নেওয়া মালিকানা বাস্তবায়নের জন্য উল্লেখ গণনা করে।
অনেক টিউটোরিয়াল যেমন একটি স্নিপেট ব্যবহার করে অবজেক্ট ইনস্ট্যান্টেশন প্রদর্শন করে ...
সুতরাং আপনি যা আবিষ্কার করেছেন তা হল বেশিরভাগ টিউটোরিয়াল স্তন্যপান করে। ;) বেশিরভাগ টিউটোরিয়ালগুলি আপনাকে প্রয়োজন হয় না যখন ভেরিয়েবল তৈরি করতে নতুন / মুছুন কল করা এবং আপনার বরাদ্দগুলির আজীবন ট্র্যাকিংয়ের জন্য একটি কঠিন সময় প্রদান সহ লাউ সি ++ অনুশীলনগুলি শেখায়।