বিষয়টি বেশিরভাগ ক্ষেত্রে aতিহাসিক নিদর্শন, বাস্তবায়নের অসম্ভবতা নয়।
বেশিরভাগ সি সংকলক কোড তৈরির উপায়টি যাতে সংকলক কেবল প্রতিটি উত্স ফাইল একসাথে দেখতে পায়; এটি একবারে পুরো প্রোগ্রামটি কখনও দেখেনি। যখন একটি উত্স ফাইল অন্য উত্স ফাইল বা একটি লাইব্রেরি থেকে কোনও ফাংশন কল করে, সমস্ত সংকলকটি ফাংশনটির রিটার্ন টাইপ সহ শিরোনাম ফাইল, ফাংশনের আসল কোড নয়। এর অর্থ যখন কোনও ফাংশন থাকে যা কোনও পয়েন্টারকে ফেরত দেয়, সংকলকটির কাছে পয়েন্টারটি নির্দেশ করে যে মেমরিটি ইঙ্গিত করছে সেটিকে মুক্ত করতে হবে কিনা তা জানার কোনও উপায় নেই। সিদ্ধান্ত নেওয়ার তথ্যটি সেই সময়ে সংকলককে প্রদর্শিত হবে না। অন্যদিকে একজন হিউম্যান প্রোগ্রামার ফাংশনটির সোর্স কোড বা পয়েন্টারটি দিয়ে কী করা দরকার তা জানতে ডকুমেন্টেশন নিখরচায় রয়েছে।
আপনি যদি সি ++ 11 বা মরিচের মতো আরও আধুনিক নিম্ন-স্তরের ভাষাগুলি সন্ধান করেন তবে আপনি দেখতে পাবেন যে তারা বেশিরভাগ ক্ষেত্রে পয়েন্টারের ধরণে মেমরির মালিকানা স্পষ্ট করে সমস্যার সমাধান করেছে। সি ++ তে আপনি মেমরি ধরে রাখতে unique_ptr<T>
একটি সমতল পরিবর্তে একটি ব্যবহার করবেন এবং প্লেইনটির বিপরীতে যখন অবজেক্টটি স্কোপের শেষে পৌঁছবে তখন স্মৃতিটি মুক্ত হয়ে যায় তা নিশ্চিত করে । প্রোগ্রামার মেমোরিটিকে অন্য থেকে অন্যের হাতে তুলে দিতে পারে তবে মেমরিটিতে কেবল একটিই পয়েন্ট করা যায়। সুতরাং এটি সর্বদা স্পষ্ট যে মেমরিটির মালিক এবং কখন এটি মুক্ত করা দরকার।T*
unique_ptr<T>
T*
unique_ptr<T>
unique_ptr<T>
সি ++, পশ্চাদপটে সামঞ্জস্যতার কারণে, এখনও পুরানো স্টাইলের ম্যানুয়াল মেমরি ম্যানেজমেন্ট এবং এইভাবে কোনও এর সুরক্ষা রোধ করার জন্য বাগ বা উপায় তৈরি করার অনুমতি দেয় unique_ptr<T>
। মরিচা এমনকি আরও কঠোর কারণ এটি সংকলক ত্রুটির মাধ্যমে মেমরির মালিকানা বিধি প্রয়োগ করে।
অনিশ্চয়তার জন্য, থামার সমস্যা এবং এর মতো, হ্যাঁ, আপনি সি শব্দার্থকে আঁকড়ে রাখলে স্মৃতি মুক্ত হওয়া উচিত যখন সমস্ত প্রোগ্রামের জন্য সিদ্ধান্ত নেওয়া সম্ভব হয় না। তবে বেশিরভাগ আসল প্রোগ্রামগুলির জন্য, একাডেমিক অনুশীলন বা বগি সফ্টওয়্যার নয়, কখন মুক্ত করবেন এবং কখন না করবেন তা ঠিক সিদ্ধান্ত নেওয়া সম্ভব। এটি হ'ল সমস্ত কারণেই যখন মানুষ কখন নির্ধারণ করতে পারে বা কখন প্রথম স্থানে থাকবে না।